条件控制

参考链接:

  1. https://blog.youkuaiyun.com/jasonzeng/article/details/53286384
  2. https://www.tuicool.com/articles/m6zqyq
  3. https://cnbin.github.io/blog/2015/06/30/bash-tiao-jian-pan-duan/
  4. http://www.linuxdiyf.com/viewarticle.php?id=105505

IF条件判断

语法模式:
if [ command ]; then
    符合该条件执行的语句
fi

#扩展语法:
if [ command ];then
    符合该条件执行的语句
elif [ command ];then
    符合该条件执行的语句
else
    符合该条件执行的语句
fi

备注说明:

  • [ ]表示条件测试。注意这里的空格很重要。要注意在’[‘后面和’]'前面都必须要有空格
  • 双方括号[[ ]]:是[]的升级功能,包含一些正则匹配等功能。
  • 双圆括号(( )):表示数学表达式
  • 如果只单独使用>或者<号,系统会认为是输出或者输入重定向,使用时需转义
  • 在shell中,then和fi是分开的语句。如果要在同一行里面输入,则需要用分号将他们隔开
  • 使用-z或者-n来检查长度的时候,没有定义的变量也为0
数值比较
符号数学表示
-eq=/==
-ne!=
-gt>
-ge>=
-lt<
-le<=

(( ))中可以直接使用右边的表达式

#脚本
#!/bin/bash
echo "test 1 > 0"

if ((1 > 0));then
	echo "1>0"
else 
	echo "error"
fi

echo "test 1 -gt 0"
if [ 1 -gt 0 ];then
	echo "1 -gt 0"
else 
	echo "error"
fi

if [[ 1 -lt 0 ]];then
	echo "error"
else
	echo "双括号的使用"
fi

#执行结果
test 1 > 0
1>0
test 1 -gt 0
1 -gt 0
双括号的使用
字符串判断
符号意义
[ -z STRING ]STRING的长度为零则返回为真
[ -n STRING ]STRING的长度非零则返回为真
[ STRING1 != STRING2 ]字符串不相同则返回为真
[ STRING1 ]STRING的长度非零则返回为真
[dps@ccod131 bak]$ cat if_string.sh 
#!/bin/bash
a=""
b="123"
c="321"

echo "验证字符串判断"
if [ -z "$d" ];then echo "-z 表示字符串为空";fi
if [ -z "$a" ];then echo "验证-z包含字符为空和不存在两种情况";fi
if [ -n "$a" ];then echo "验证a的长度";fi
if [ -n "$b" ];then echo "验证b非空 -n";fi
if [ "$b" != "$c" ];then echo "验证!=的意义";fi
if [ "$c" ];then echo "验证仅输入字符串验证其非空";fi
[dps@ccod131 bak]$ bash if_string.sh 
验证字符串判断
-z 表示字符串为空
验证-z包含字符为空和不存在两种情况
验证b非空 -n
验证!=的意义
验证仅输入字符串验证其非空

备注:

  • 在测试表达式[]中,字符串需要用“”号引起来;
逻辑判断
符号意义
[ ! EXPR ]逻辑非
[ EXPR1 -a EXPR2 ]逻辑与
[ EXPR1 -o EXPR2 ]逻辑或
[ ] || [ ]用OR来合并两个条件
[ ] && [ ]用AND来合并两个条件
文件判断
符号意义
[ -a FILE ]如果 FILE 存在则为真。
[ -b FILE ]如果 FILE 存在且是一个块文件则返回为真。
[ -c FILE ]如果 FILE 存在且是一个字符文件则返回为真。
[ -d FILE ]如果 FILE 存在且是一个目录则返回为真。
[ -e FILE ]如果 指定的文件或目录存在时返回为真。
[ -f FILE ]如果 FILE 存在且是一个普通文件则返回为真。
[ -g FILE ]如果 FILE 存在且设置了SGID则返回为真。
[ -h FILE ]如果 FILE 存在且是一个符号符号链接文件则返回为真。
[ -k FILE ]如果 FILE 存在且已经设置了冒险位则返回为真。
[ -p FILE ]如果 FILE 存并且是命令管道时返回为真。
[ -r FILE ]如果 FILE 存在且是可读的则返回为真。
[ -s FILE ]如果 FILE 存在且大小非0时为真则返回为真。
[ -u FILE ]如果 FILE 存在且设置了SUID位时返回为真。
[ -w FILE ]如果 FILE 存在且是可写的则返回为真。(一个目录为了它的内容被访问必然是可执行的)
[ -x FILE ]如果 FILE 存在且是可执行的则返回为真。
[ -O FILE ]如果 FILE 存在且属有效用户ID则返回为真。
[ -G FILE ]如果 FILE 存在且默认组为当前组则返回为真。(只检查系统默认组)
[ -L FILE ]如果 FILE 存在且是一个符号连接则返回为真。
[ -N FILE ]如果 FILE 存在 and has been mod如果ied since it was last read则返回为真。
[ -S FILE ]如果 FILE 存在且是一个套接字则返回为真。
[ FILE1 -nt FILE2 ]如果 FILE1 比 FILE2 新, 或者 FILE1 存在但是 FILE2 不存在则返回为真。
[ FILE1 -ot FILE2 ]如果 FILE1 比 FILE2 老, 或者 FILE2 存在但是 FILE1 不存在则返回为真。
[ FILE1 -ef FILE2 ]如果 FILE1 和 FILE2 指向相同的设备和节点号则返回为真。
[dps@ccod131 bak]$ ls
awk.txt  break_continue.sh  for_canshu.sh  for_c.sh  for_list.sh  if_file.sh  if_number.sh  if_string.sh  select_1.sh  shift.sh  until.sh  while.sh

# 执行效果
[dps@ccod131 bak]$ bash if_file.sh 
awk.txt不具备可执行权限
break_continue.sh具有可执行权限
for_canshu.sh具有可执行权限
for_c.sh具有可执行权限
for_list.sh具有可执行权限
if_file.sh不具备可执行权限
if_number.sh不具备可执行权限
if_string.sh不具备可执行权限
select_1.sh具有可执行权限
shift.sh具有可执行权限
until.sh具有可执行权限
while.sh具有可执行权限

# 脚本
[dps@ccod131 bak]$ cat if_file.sh 
#!/bin/bash

for x in *
do
  if [ -x "$x" ]
  then
	echo "${x}具有可执行权限"
  else
	echo "${x}不具备可执行权限"
  fi
done

case语法规则

语法模式
 case $变量名 in
                模式1)
            命令序列1
            ;;
                模式2)
            命令序列2
         ;; 
                *)
            默认执行的命令序列     ;; 
            esac 

注意点:

  • case行尾必须为单词“in”,每一个模式必须以右括号“)”结束
  • 双分号“;;”表示命令序列结束
  • 匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或;最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后 的命令序列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值