Shell·学习笔记---(语法篇一)

· 条件测试
· 多条件测试
· if语句
· 条件嵌套
· ||和&&

# 条件测试 
# shell脚本中测试是通过命令来完成的
# 常见的测试命令包括test或[
# 听过检查该类命令的退出码,决定条件测试是否成立
# 注意:shell中退出码为0表示测试条件成立,为1表示不成立
 read myint
 test $myint -eq 100
 echo $?
# 测试类型
# 整数测试:-eq(=) -ne(!=) -lt(<) -gt(>) -le(<=) -gt(>=)
 read myint
 test $myint -eq 100
 echo $?
 [ $myint -ne 100 ]#此处一定注意语句和[]之间必须要有空格
 echo $?
# 字符串测试:== (=) != -z -n
 read mystring
 [ "X$mystring" == "Xhello" ]
 echo $?
 [ "X$mystring" != "Xhello" ]
 echo $?
 [ -z $mystring ] #是否为空串
 echo $?
 [ -n $mystring ] #是否为非空串
 echo $?
# 文件测试:-d -f -b -c
 [ -c /dev/tty ] #测试是否为字符设备文件
 echo $?
 [ -b /dev/sda ] #测试是否为块设备文件
 echo $?
 [ -f ./shell2.sh ] #测试是否为普通文件
 echo $?
 [ -d / ] #测试是否为目录
 echo $?
# test 或[ 可以测试一个条件是否成立,如果测试结果为真
# 则该命令的退出码为0,为假则退出码为1
# 使用[命令测试时,传给命令的各参数之间应该用空格隔开
# test和[测试命令的参数形式是相同的
# 只不过[命令后面多了一个]参数 

# 多条件测试
# 逻辑反: !
 read mystring
 [ ! "X$mystring" == "Xhello" ]
 echo $?
# 逻辑与: -a   (and)
 printf "Enter data1: "
 read data1
 printf "Enter data2: "
 read data2
 [ $data1 -eq 100 -a $data2 -eq 200 ]
 echo $?
# 逻辑或:-o   (or)
 printf "Enter data1: "
 read data1
 printf "Enter data2: "
 read data2
 [ $data1 -eq 100 -o $data2 -eq 200 ]
 echo $?

# if语句
 printf "Enter string: "
 read string
 if [ "X$string" == "Xhello" ]
 then
     echo "get hello"
 fi
# 如果两条命令卸载同一行则需要用;隔开
# 一行致谢一条命令就不需要写;号
# then后面有换行,但这条命令没写完,shell会自动续行
# 把下一行接在then后面当做一条命令处理
# 和[命令一样,要注意命令和个参数之间必须用空格隔开
 printf "Enter string: "
 read string
 if [ "X$string" == "Xhello" ];then
     echo "get hello"
 fi
# 条件嵌套
 printf "Enter data: "
 read data
 if [ $data -lt 100 ];then
     if [ $data -eq 50 ];then
         echo "data is eq than 50"
     elif [ $data -lt 50 ];then
         echo "data is lt than 50"
     else
         echo "data is gt than 50 and lt than 100"
     fi
 else
     echo "data is gt than 100"
 fi
# if命令的参数组成一条子命令,如果该子命令的退出码
# 为0则表示真,则执行then后面的子命令
# 如果非0则表示假,则执行elif,else或者fi后面的子命令
# if后面的子命令通常是测试命令,但也可以是其他命令
# 所以说,只要某个命令的退出码为0或者为1来表名执行结果
# 该命令都可以放在if后
# 练习:检测文件中是否含有222这样的关键字
# 思路:用if进行条件判断,直接判断grep命令的执行结果
# -E:使用扩展正则匹配
# -q:使用安静模式匹配
 printf "Enter filename: "
 read filename
 if grep -Eq '222' "$filename";then
     echo "yes"
 else
     echo "no"
 fi
# shell中没有{}。所以用fi表示if语句块的结束

# 空代码块
# 在shell中,如果我们在一个应该出现语句的地方
# 却不需要任何语句执行任何事情,如果空下不写语句
# 则shell就会报错
 read myint
 if [ $myint -eq 100 ];then
 else
     echo "then后面是个空余句"
 fi
# 解决办法:用:   :是一个特殊的命令,称为空命令
# 该命令不做任何事情,但退出码总是为真
# 此外也可以执行/bin/true或/bin/false
# 得到真或者假的退出码
 printf "Enter data: "
 read data
 if [ $data -eq 100 ];then
     false   # 这里也可以用true/false命令代替
 else
     echo "data is ne than 100"
 fi

# ||和&&
# ||
 printf "Enter data1: "
 read data1
 [ $data1 -eq 100 ] && echo "yes"
 [ $data1 -eq 100 ] && {
     echo "yes"
 }
# &&
 printf "Enter data2: "
 read data2
 [ $data2 -eq 100 ] && echo "YES1"
 [ $data2 -eq 100 ] || {
     echo "YES2"
 }
# &&相当于if……then.而||相当于if not …… then.
# && 和 || 用于连接两个命令,
# 而上面讲的-a(逻辑与)和-o(逻辑或)仅用于
# 在测试表达式中连接两个测试条件
# shell这里的{}中包含的语句会在当前shell进程中执行
# 而()中包含的语句会创建新的shell进程执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值