水电工888 发表于 2018-8-26 10:44:01

Linux运维之道之ENGINEER1.4(shell脚本基础)

  ENGINEER1.4
  SHELL脚本基础
  认识shell环境
  bash shell的使用方式
  交互式:
  --人工干预,智能化程度高
  --逐条解释执行,效率低
  非交互式:
  --需要提前设计,智能化难度大;
  --批量执行,效率高;
  --方便在后台及悄悄地执行;
  什么是shell脚本:提前设计可执行语句,用来完成特定任务的文件
  --解释型程序
  --顺序,批量执行
  规范shell脚本的一般组成:
  #!环境声明
  #注释文本
  可执行代码
  ----------------------------------------------------------------------------------------------------------------------------------
  例1:
  编写helloworld.sh问候脚本

[*]  编写脚本代码:
  #vim/root/helloworld.sh
  #!/bin/bash
  echo “helloworld”
[*]  添加x执行权限
  #chmod+x/root/helloworld.sh
[*]  运行脚本测试
  #/root/helloworld.sh
  例2:
  编写系统信息报告脚本

[*]  编写脚本代码:
  #vim/root/1.sh
  #!/bin/bash
  cat/etc/redhat-release
  uname-r
  hostname
  2.添加x执行权限
  # chmod+x   /root/1.sh
  3.运行脚本测试:
  #/root/1.sh
  --------------------------------------------------------------------------------------------------------------------------------------
  简单脚本技巧
  重定向输出的应用
  >:只收集正确    2>:只收集错误      &>:全部收集
  本例要求编写一个脚本 /root/out.sh,功能特性如下:

[*]  执行此脚本显示Ilovestudy !!
[*]  执行 /root/out.sh2>err.log 应该没有显示,但是查看 err.log 文件的内容为Ilovestudy !!
  步骤:

[*]  #vim /root/out.sh
  #!/bin/bash
  #echo"ilove   study!!"   >&2
[*]  #chmod-x   /root/out.sh
[*]  #/root/out.sh
[*]  #/root/out.sh2>err.log
[*]  #cat err.log
  ----------------------------------------------------------------------------------------------------------------------------------------
  变量的定义及使用
  以不变的名称存放可能变化的值
  引用变量值:$变量名    以{}界定易混淆名称
  变量的种类:
  根据变量的用途不同区分:
  环境变量:变量名一般都大写,用来设置用户,系统环境   (PATH)
  位置变量:bash内置,存储内置脚本时提供的命令行参数   $n ,n为序号$1 $2 ...${10}
  预定义变量:bash内置,可直接调用的特殊值,不能直接修改
  $#:已加载的位置变量的个数   $*:所有位置变量的值$?:程序退出后的状态值,0表示正常,其他异常
  自定义变量:用户自主设计,修改和使用
  例:
  要求编写一个脚本 /root/myhead,功能特性如下:
  此脚本可接收2个位置参数,能够按照下列格式执行
  此脚本执行后,能显示“你一共提供了 $# 个参数”,然后在下一行显示“文件 $1 的前 $2 行: ”,紧跟下一行开始输出对应文件的前几行内容
  步骤一:编写 /root/myuseradd 添加用户的脚本
  #vim/root/myuseradd
  #!/bin/bash
  echo“一共提供了$#个参数”
  echo   "用户名是$1,密码是$2   "
  useradd $1
  echo "$2"   |passwd--stdin $1
  二.添加执行权限
  #chmod-x/root/myuseradd.sh
  ----------------------------------------------------------------------------------------------------------------------------------------------
  常用测试选项:

[*]  文件状态检测-f、-d、-e、-r、-w、-x
[*]  整数值比较-gt、-ge、-eq、-ne、-lt、-le
[*]  字符串比较==、!=
[*]  取反操作!
  多分支if选择结构:
  if条件测试操作1   then命令序列1
  elif 条件测试操作2   then命令序列2
  else命令序列3
  fi
  例:
  本例要求在虚拟机 server0 上创建 /root/foo.sh 脚本,任务目标如下:

[*]  当运行/root/foo.sh redhat,输出为fedora
[*]  当运行/root/foo.sh fedora,输出为redhat
[*]  当没有任何参数或者参数不是 redhat 或者 fedora时,其错误输出产生以下信息: /root/foo.sh redhat|fedora
  1)编写脚本代码
  # vim/root/foo.sh
  #!/bin/bash
  if [ "$1" = "redhat" ]
  then
  echo "fedora"
  elif [ "$1" = "fedora" ]
  then
  echo "redhat"
  else
  echo "/root/foo.sh redhat|fedora" >&2
  fi
  2)添加x执行权限
  # chmod+x/root/foo.sh
  步骤二:测试foo.sh判断脚本
  1)测试提供正确参数的情况
  # /root/foo.shredhat fedora
  # /root/foo.shfedora Redhat
  2)测试提供非预期参数的情况
  # /root/foo.shubuntu
  /root/foo.sh redhat|fedora
  3)测试不提供参数的情况
  # /root/foo.sh
  /root/foo.sh redhat|fedora

页: [1]
查看完整版本: Linux运维之道之ENGINEER1.4(shell脚本基础)