fengda 发表于 2018-8-28 07:49:56

shell脚本基础与练习

  #!bin/bash
  检测脚本是否有语法问题:bash -n

  ID1 AND>  ID1=$(head -15 /etc/passwd |tail -1 |cut -d: -f3)
  ID2=$(head -13 /etc/passwd |tail -1 |cut -d: -f3)

  go to sum>  ID_SUM=$[$ID1+$ID2]

  echo "the>
  echo "the>
  echo "the>  lianxi计算3个用户的ID之和
  ID1=$(id -u EZ)
  ID2=$(id -u linux)
  ID3=$(id -u zhang)

  go to sum>  ID_SUM=$[$ID1+$ID2+$ID3]

  echo "the>
  echo "the>
  echo "the>
  echo "the>  lianxi2计算/etc/XXXXXXXX和/etc/XXXXX文件的空白行数之和
  ID1=$(grep "^[[:space:]]*$" /etc/rc.d/init.d/functions |wc -l)
  ID2=$(grep "^[[:space:]]*$" /etc/rc.d/init.d/network |wc -l)

  go to sum>  ID_SUM=$[$ID1+$ID2]

  echo "the>
  echo "the>
  echo "the>  条件测试
  成功:0失败:1-255
  数值测试 数值之间的比较
  -eq 是否等于
  A=1
  B=1
  第一种写法[$A -eq $B]记得第一个括号之后跟两个空格
  echo $?
  0
  B=3
  [ $A -eq $b]
  echo $?
  1-255
  -ne 是否不等于
  -gt 是否大于
  -ge 大于等于
  -lt 小于
  -le 是否小于等于
  第二种写法: test 2 -eq 3
  echo $?
  1-255
  第三种写法 `EXPRESSION`一般用于字符表示时
  练习:判断centos用户ID是否比Ubuntu用户ID大?
  ID1=$(id -u centos)
  ID2=$(id -u ubuntu)

  [$ID1 -gt $ID2] && echo "centos>  字符串测试
  == 是否等于
  列如
  echo $?
  0
  列U=ubuntu
  
  echo $?
  0
  注意在字符比较的时候尽量使用""为了避免语法出错
  例如
  > 是否大于
  < 是否小于
  != 是否不等于
  =~ 左侧字符串是否能够被右侧的PATTERN所匹配
  name=ubuntu
  [[ "$name" =~ buntu ]]
  echo $?
  0
  [[ "$name" =~ buntuu ]]
  echo $?
  1-255
  练习:判断主机名是否包含linux,如果不包含的话,则修改为linux
  调取主机名:hostname
  HN=$(hostname)
  注意应为hostname 是个命令,所以需要用$()起来
  [[ "$HN" =~ linux ]]
  echo $?
  0
  最终答案:
  [[ "$HN" =~ magedu ]] || hostname magedu
  -z 判断字符串是否为空,为真
  -n 判断字符串是否不为空
  练习:主机名如果为空,或者为localhost.locadomain 或者包含localhost 或者包含Linux 则
  通通将其设为www.magedu.com
  hn=$(hostname)
  [-z "$hn" -o "$hn"=="localhost.locadomain" -o "$hn"=~"localhost" -o "$hn"=~"linux"] && hostname www.magedu.com
  文件测试
  存在性测试
  -a file
  -e file 文件的存在性测试,如果存在,则为真。
  [-e /etc/passwd ]
  echo $?
  0
  文件的测试类型
  -b file 是否为块设备
  -c file 是否为字符设备
  -d file 是否为目录
  -f file 是否为普通文件
  -h 或者-L是否为符号链接
  -p file 是否为管道设备
  -S file 是否为套接字文件
  [-c /dev/null ] && echo "null 是字符设备"
  文件权限测设
  -r 对当前用户是否可读
  -w 对当前用户是否可写
  -x 对当前用户是否可执行
  [-r /etc/passwd ] && echo "passwd 当前用户可读"
  文件,是否有内容
  -s file 是否有内容
  时间戳
  -N file 文件自从上次操作之后,是否被改过
  从属关系测试
  -O file 当前用户是否为文件的属主
  -G file 当前用户是否为文件的属组
  双目测试
  FILE1 -ef FILE2 是否指向同一个文件系统的相同inode的硬连接
  FILE1 -nt FILE2 FILE1文件,是否新于FILE2
  FILE1 -ot FILE2 FILE1文件,是否旧与FILE2
  查看一个文件是否有内容
  test -s linux.com
  echo $?
  2
  但给linux.com文件添加内容后echo "test" > linux.com
  echo $?
  0
  文件自上次访问后是否被改过
  test -N magedu.com
  echo $?
  组合测试条件:
  逻辑运算
  第一种方式:
  command1 && command2 表示并且的关系
  command1 || command2 表示或的关系
  ! command 表示取反
  第二种方式
  expression -a expression 表示并且的关系
  expression -o expression 表示或的关系
  -not !expression 表示取反
  [-o file -a -x file ] 当前用户是否为file文件的属主,并且是否有执行权限
  exit n表示自己可以指定一个状态码
  注意; shell脚本中,一旦遇到exit时,即将会退出
  练习:一行命令实现,linux用户是否存在,不存在,则添加,如果存在,以状态码为5的方式退出。
  id linux &> /dev/null && exit 5 || useradd linux

页: [1]
查看完整版本: shell脚本基础与练习