学习是一个逐步发现自己无知的过程!

Shell条件表达式

Shell 条件表达式

条件测试与比较 在bash的各种流程控制结构中通常要进行各种测试,然后根据测试结果执行不同的操作, 有时也会通过与if等条件语句相结合,更方便的完成判断

真 1 假 0

条件测试通常有如下3种语法形式

语法格式1:test <测试表达式>

语法格式2:[ 测试表达式 ]

语法格式3:[[ 测试表达式 ]]

最多 22 列

  • 剪切

  • 复制

  • 粘贴

请使用 Ctrl+V 粘贴

  • 向上插入 1 行

  • 向下插入 1 行

  • 向左插入 1 列

  • 向右插入 1 列

  • 插入超链接

  • 合并单元格

  • 取消合并单元格

  • 删除列

  • 删除行

  • 删除表格

文件判断

使用方法 功能描述
test -f 文件 文件存在且为普通文件则真,条件表达式成立
test -d 目录 目录存在且为目录文件则真,条件表达式成立
test -s 文件 文件存在且文件大小不为0则真,条件表达式成立
test -e 文件 文件存在则真,只要有文件就行
test -r 文件 文件存在且可读则真,条件表达式成立
test -w 文件 文件存在且可写则真,条件表达式成立
test -L 文件 文件存在且为链接文件则真,条件表达式成立
test f1 -nt f2 文件f1比文件f2新则真,条件表达式成立
test f1 -ot f2 文件f1比文件f2旧则真,条件表达式成立
test -n "string" "string"长度不为0,条件表达式成立
test -z "string" "string"长度为0,条件表达式成立
test str1 = str2 "str1"内容和 "str2"内容完全一致,条件表达式成立
test str1 != str2 "str1"内容和"str2"内容不一致,条件表达式成立
test int1 -eq int2 "int1"的值和"int2"的值相等,条件表达式成立

test语法

  [root@db02 scripts]# test -f /etc/hosts && echo 1||echo 0
  1
  [root@db02 scripts]# test -x /etc/hosts && echo 1||echo 0 
  0
  [root@db02 scripts]# test -x test1.sh && echo 1||echo 0          
  0
  [root@db02 scripts]# chmod +x test1.sh 
  [root@db02 scripts]# test -x test1.sh && echo 1||echo 0
  1
  [root@db02 scripts]# test -d /etc && echo 1||echo 0          
  1
  [root@db02 scripts]# test -d /etc/hosts && echo 1||echo 0
  0
  [root@db02 scripts]# test -z "oldboy" && echo 1||echo 0            
  0
  [root@db02 scripts]# test -z "" && echo 1||echo 0      
  1

[ ]    语法

最多 22 列

  • 剪切

  • 复制

  • 粘贴 请使用 Ctrl+V 粘贴

  • 向上插入 1 行

  • 向下插入 1 行

  • 向左插入 1 列

  • 向右插入 1 列

  • 插入超链接

  • 合并单元格

  • 取消合并单元格

  • 删除列

  • 删除行

  • 删除表格

使用方法 功能描述
[ -f 文件 ] 文件存在且为普通文件则真,条件表达式成立
[ -d 目录 ] 目录存在且为目录文件则真,条件表达式成立
[ -s 文件 ] 文件存在且文件大小不为0则真,条件表达式成立
[ -e 文件 ] 文件存在则真,只要有文件就行
[ -r 文件 ] 文件存在且可读则真,条件表达式成立
[ -w 文件 ] 文件存在且可写则真,条件表达式成立
[ -L 文件 ] 文件存在且为链接文件则真,条件表达式成立
[ f1 -nt f2 ] 文件f1比文件f2新则真,条件表达式成立
[ f1 -ot f2 ] 文件f1比文件f2旧则真,条件表达式成立
[ -n "string" ] "string"长度不为0,条件表达式成立
[ -z "string" ] "string"长度为0,条件表达式成立
[ "str1" = "str2" ] "str1"内容和 "str2"内容完全一致,条件表达式成立
[ "str1" != "str2" ] "str1"内容和"str2"内容不一致,条件表达式成立
[ int1 -eq int2 ] "int1" 等于 "int2" ,条件表达式成立
[ int1 -ne int2 ] "int1" 不等于 "int2" ,条件表达式成立
[ int1 -gt int2 ] "int1" 大于 "int2",条件表达式成立
[ int1 -ge int2 ] "int1" 大于或等于 "int2",条件表达式成立
[ int1 -lt int2 ] "int1" 小于 "int2",条件表达式成立
[ int1 -le int2 ] "int1" 小于或等于 "int2",条件表达式成立
  [root@db02 scripts]# [ -f /etc/hosts ] && echo 1||echo 0
  1
  [root@db02 scripts]# [ -f /etc/host ] && echo 1||echo 0 
  0
  [root@db02 scripts]# [ -d /etc/host ] && echo 1||echo 0 
  0
  [root@db02 scripts]# [ -d /etc ] && echo 1||echo 0     
  1
  1.  **[[ ]]语法**
  [root@db02 scripts]# [[ -d /etc/hosts ]] && echo 1||echo 0 
  0
  [root@db02 scripts]# [[ -d /etc ]] && echo 1||echo 0      
  1
  [root@db02 scripts]# [[ -d /etc && -f /etc/hosts ]] && echo 1||echo 0 
  1
  [root@db02 scripts]# [[ -d /etc && -f /etc/host ]] && echo 1||echo 0 
  0
  [root@db02 scripts]# [ -d /etc && -f /etc/host ] && echo 1||echo 0  
  -bash: [: missing `]'
  0
  [root@db02 scripts]# [ -d /etc -a -f /etc/host ] && echo 1||echo 0  
  0
  [root@db02 scripts]# [ -d /etc -o -f /etc/host ] && echo 1||echo 0 
  1
  [root@db02 scripts]# [[ -d /etc || -f /etc/host ]] && echo 1||echo 0  
  1

检查文件目录是否存在

    .  /etc/init.d/functions
  function checkDirExist()
  {
       local ONE_PATH="$1" 
       test -d "$ONE_PATH" && action "check dir" /bin/true || action "check dir" /bin/false
  }
  checkDirExist $1

[ ] [[ ]]    对比

  [root@web01 shell_class_02]# [ 2 -gt 1 -a 1 -eq 1 ];echo $?
  0
  [root@web01 shell_class_02]# [[ 2 -gt 1 && 1 -eq 1 ]];echo $?  
  0

(( ))     只能用于整数判断

  [root@oldboy36 scripts]# ((1>1)) && echo 1 || echo 0
  0
  [root@oldboy36 scripts]# ((1==1)) && echo 1 || echo 0
  1
  [root@oldboy36 scripts]# ((1>=1)) && echo 1 || echo 0
  1
  [root@oldboy36 scripts]# ((1==1)) && ((2<3)) && echo 1 || echo 0
  1
  [root@oldboy36 scripts]# ((1==1)) && ((2==3)) && echo 1 || echo 0
  0
  [root@oldboy36 scripts]# ((1==1)) || ((2==3)) && echo 1 || echo 0
  1
  [root@oldboy36 scripts]# a=1
  [root@oldboy36 scripts]# b=2
  [root@oldboy36 scripts]# c=5
  [root@oldboy36 scripts]# d=5
  [root@oldboy36 scripts]# ((a<b)) && ((c>d)) && echo 1 || echo 0
  0
  [root@oldboy36 scripts]# ((a<b)) && ((c=d)) && echo 1 || echo 0
  1
  [root@oldboy36 scripts]# ((a<b)) || ((c<d)) && echo 1 || echo 0
  1
  [root@oldboy36 scripts]# ((a>=b)) && echo 1 || echo 0
  0
  [root@oldboy36 scripts]# ((a!=b)) && echo 1 || echo 0
  1
  [root@oldboy36 scripts]# cat judge.sh 
  read -p "请输入第1个参数:" num1
  read -p "请输入第2个参数:" num2
  [ -z "$num1" -o -z "$num2" ] && echo "输入不全是数字" && exit 1
  expr $num1 + 1 &> /dev/null
  (($?!=0)) && echo "第一个参数不是整数" && exit 2
  expr $num2 + 1 &> /dev/null
  (($?!=0)) && echo "第二个参数不是整数" && exit 3
  ((num1>num2)) && echo "$num1>$num2" && exit
  ((num1==num2)) && echo "$num1=$num2" && exit
  ((num1<num2)) && echo "$num1<$num2"  && exit
赞(1)
未经允许不得转载:劉大帥 » Shell条件表达式

你的评论可能会一针见血! 抢沙发

登录

找回密码

注册