2021-04-23 if流程控制和条件判断

学习总结

  • 加深了解了if条件控制语句的用法
  • 算术比较,字符串比较,文件判断等条件判断用法

明日安排

  • 继续学习《Linux Shell 脚本攻略》这本书
    • find
    • cat
    • xargs
    • tr
  • 学习forwhileutilcase…select等流程控制语句

笔记内容

Linux Shell 流程控制

  • [ $UID -eq 0] && echo "Is root user" 如果condition为真,则执行action,
  • [ $UID -eq 0] || echo "Is't root user" 如果condition为假,则执行action,

1.15 比较与测试

算术比较

  • -eq 等于,equals
  • -ne 不等于,not equals
  • -gt 大于
  • -lt 小于
  • -ge 大于或等于
  • -le 小于或等于
  • -o 逻辑或,or
  • -a 逻辑与,and

具体操作示例如下:

virde@virde:~$ aa=1;bb=2
virde@virde:~$ [ $aa -eq 1 -a $bb -eq 2 ] && echo Right
Right
virde@virde:~$ [ $aa -eq 1 -o $bb -eq 3 ] && echo Right
Right

文件系统

  • [ -e $var ] 文件存在则为真
  • [ -r $var ] 文件存在且可读则为真
  • [ -w $var ] 文件存在且可写则为真
  • [ -x $var ] 文件存在且可执行则为真
  • [ -s $var ] 文件存在且至少有一个字符则为真
  • [ -d $var ] 文件存在且为目录则为真

字符串比较

使用字符串进行比较时,最好用双中括号,因为有时候采用单个中括号会产生错误,所以最好避开它们

  • [[ $str1 = $str2 ]] 比较两个字符串变量是否一样
  • [[ $str1 == $str2 ]] 同上,比较两个字符串变量是否一样
  • [[ -z $str1 ]] str1变量为空,则为真
  • [[ -n $str1 ]] str变量非空,则为真
  • [[ $str1 = s*a ]] str1 是否匹配s*a

可以用test命令执行条件检测,有助于避免使用过多括号

virde@virde:~$ str1=""
virde@virde:~$ test -z $str1 && echo "str1 is empty"
str1 is empty
virde@virde:~$ [[ -z $str1 ]] && echo "str1 is empty"
str1 is empty
virde@virde:~$ 

IFS变量的使用

data="name,sex,roolno,location"
oldIFS=$IFS
IFS=","
for item in $data;
do
    echo Item: $item
done
IFS=$oldIFS

流程控制

str=$1;
if [[ $str == "haha" ]] 
then
    echo hahahahahahha;
elif [[ $str = "hi" ]]
then
    echo hi,beauty~
else
    echo str is $str
fi

if条件判断语句,需要说明的是:

  • 如果then要和if写在一行,if条件语句后必须加分号;then隔开
  • elif部分可以去掉
  • else部分也可以去掉
  • 必须以fi结尾

异常排查记录

sh调用双括号报错

str=$1;
if [[ $str == "haha" ]]; then
    echo str is haha;
else
    echo str is $str;
fi

这段代码保存为文件if.sh,当用sh if.sh haha去运行时,报错了

virde@virde:~$ sh if.sh haha
if.sh: 4: [[: not found
str is haha

经百度,原因是:sh命令无法识别[[]]表达式。
解决办法:bash与sh是有区别的,两者是不同的命令,且bash是sh的增强版,而"[[]]"是bash脚本中的命令,因此在执行时,使用sh命令会报错,将sh替换为bash命令即可。

bash if.sh haha这样调用,问题解决

参考链接:运行shell脚本时报错[[ : not found"解决方法

猜你喜欢

转载自blog.csdn.net/kaka_buka/article/details/116065976
今日推荐