sunsir 发表于 2018-8-21 11:44:57

(二)SHELL

  (二)SHELL
  1 退出脚本
  1.1 在SHELL中每个命令都有结束的状态码。
  状态嘛                               描述
  0                                  命令成功退出
  1                                  通用未知错误
  2                                  错误使用SHELL命令
  126                              命令不可执行
  127                              没找到命令
  128                              无效退出参数
  128+x                              Linux信号x的严重错误
  130                              命令通过Ctrl+C 终止
  255                              退出状态码越界
  查看状态码:
  echo $?
  # ifconfig -al
  ifconfig: option '-al' not recognised.
  ifconfig: '--help' gives usage information.
  # echo $?
  1
  # sdf
  -bash: sdf: command not found
  # echo $?
  127
  # find | more |grep
  Usage: grep ... PATTERN ...
  Try 'grep --help' for more information.
  # echo $?
  2
  1.2exit命令
  exit命令允许你在脚本执行结束时指定一个退出状态码
  #!/bin/bash
  echo "hello word"
  echo "Exit status "
  exit 5
  # sh test1.sh
  hello word
  Exit status
  # echo $?
  5
  2 逻辑结构
  2.1 使用if-then语句
  格式如下:
  if command_if
  then
  command_then
  fi
  command_if 不同于其他语言中的TURE和FALSE,command_if是根据命令返回的状态码决定是否执行then后面的语句
  当返回的状态码为0时才能执行then语句后面的命令
  e.g:
  #!/bin/bash
  #if statement
  if date
  then
  echo "It\`s OK"
  fi
  # sh if_staemtn.sh
  Sat Aug 17 05:01:36 EDT 2013
  It`s OK
  if-then 另一种写法
  if command;then
  commands
  fi
  2.2 if-then-else语句
  if command
  then
  commands
  else
  commands
  fi
  #!/bin/bash
  if Hello_kitty; then
  echo "Oh yes"
  else
  echo "It is False"
  fi
  # sh hello_kitty.sh
  hello_kitty.sh: line 3: Hello_kitty: command not found
  It is False
  2.3 嵌套if
  if commands
  then
  commands2
  elif commands2
  then
  commands
  fi
  #!/bin/bash
  ifadc
  then
  echo "A"
  elif echo ' '
  then
  echo "B"
  fi
  3 test命令
  test 命令可以判断3类条件
  (1) 数值比较
  (2) 字符串比较
  (3) 文件比较
  3.1
  数值比较:
  n1 -eq n2      检查是否相等
  n1 -ge n2      n1是否大于等于n2
  n1 -gt n2      检查n1大于n2
  n1 -le n2      检查n1是否小于等于n2
  n1 -lt n2      检查n1是否小于n2
  n1 -ne n2      检查n1是否不等于n2
  #!/bin/bash
  var1=1
  if test $var1 -eq 1
  then
  echo "var equal to 1"
  fi
  还有另为一种写法:
  if [ $var -eq 1 ]
  then
  echo "var equal to 1"
  fi
  注意的是[] 内 各加一个空格
  字符串之间的比较
  str1= str2         检查是否相同
  str1 != str2         检查是否不同
  str1 < str2          检查str1是否比str2小
  str1 > str2          检查str1是否比str2大
  -n str1            检查str1的长度是否非0
  -z str1            检查str1的长度是否为0
  #!/bin/bash
  var1=Hello
  var2=hello
  var3=Word
  var4=word
  if [ $var1 \= $var2 ]
  then
  echo &quot;$var1 $var3 &quot;
  else
  echo &quot;$var2 $var4 &quot;
  fi
  # sh test7.sh
  Hello Word
  #!/bin/bash
  if [ -n &quot;$str&quot; ]
  then
  echo &quot;legth = ${#str}&quot;
  else
  echo &quot;str Not found&quot;
  fi
  # sh test9.sh
  str Not found
  注意${#var1}能够返回变量的长度
  这个变量没有在脚本中被定义那么默认情况下长度为零
  -n/z 之后要加双引号
  3.2文件的比较
  -d file检查file是否存在并是个一目录
  -e file             检查file是否存在
  -f file             检查file是否存在并是一个文件
  -r file             检查file是否可以读
  -s file             检查file是否为空
  -w file             检查file是否可写
  -x file             检查file是够可执行
  -O file             检查file文件是否属于当前用户所有
  -G file             检查file文件是否属于当前用户组
  file1 -nt file2   检查file1文件是否比file2新
  file1 -ot file2   检查file1文件是否比file2旧
  #!/bin/bash
  dir=/root
  if [ -d &quot;$dir&quot; ]
  then
  echo &quot;/rootis directory&quot;
  fi
  # sh test10.sh
  /root dir is directory
  #!/bin/bash
  dir1=/shellscript/test3.sh
  dir2=/shellscript/test4.sh
  if [ &quot;$dir1&quot; -nt &quot;$dir2&quot; ]
  then
  echo &quot;$dir1 file is newer than $dir2&quot;
  else
  echo &quot;$dir2 file is newer than $dir2&quot;
  fi
  # sh test12.sh
  /shellscript/test4.sh file is newer than /shellscript/test4.sh
  3.3 符合条件判断:
  [ conditon1 ]&&[ conditon2 ]
  [ conditon1 ]||[ conditon2 ]
  3.4 高级特性
  使用双括号,必须是数字表达式才能使用双括号
  #!/bin/bash
  var=10
  if(( $var ** 2 > 90 ))
  then
  echo &quot;100 > 90&quot;
  fi
  # sh test13.sh
  100 > 90
  #!/bin/bash
  var=10
  if(( $var ** 2 > 90 && $var == 11 ))
  then
  echo &quot;100 > 90&quot;
  else
  echo &quot; var != 10 &quot;
  fi
  # sh test14.sh
  var != 10
  使用双方括号来比较字符串(使用到正则表达)
  ` expression `
  #!/bin/bash
  var=hello
  if [[ $var == h* ]]
  then
  echo &quot;$var&quot;
  else
  echo &quot;sorry&quot;
  fi
  # sh test15.sh
  hello
  4 case
  case 语法
  case variable in pattern1 | pattern2) commands1;;
  pattern3) commands2;;
  *) default commands;;
  esac
  #!/bin/bash
  var=A
  case $var in &quot;A&quot; | &quot;B&quot;) echo &quot;var is A or B&quot;;;
  &quot;C&quot;) echo &quot;var is C&quot;;;
  *) echo &quot;var is nothing&quot;;;
  esac
  # sh test16.sh
  var is A or B

页: [1]
查看完整版本: (二)SHELL