Shell_条件判断(一)
Shell中也有条件表达式,也就是比较两个值是否相等
基本语法
test 表达式
[ 表达式 ] 注意:中括号前后需要有空格
[root@localhost scripts]# a=10
[root@localhost scripts]# echo $a
10
[root@localhost scripts]# test $a = 10
[root@localhost scripts]# echo $?
0
[root@localhost scripts]# test $a = 11
[root@localhost scripts]# echo $?
1
[root@localhost scripts]# [ $a = 10 ]
[root@localhost scripts]# echo $?
0
[root@localhost scripts]# [ $a = 11 ]
[root@localhost scripts]# echo $?
1
[root@localhost scripts]# [ $a=11 ]
[root@localhost scripts]# echo $?
0
[root@localhost scripts]# [ ]
[root@localhost scripts]# echo $?
1
[root@localhost scripts]# [ $a != 11 ]
[root@localhost scripts]# echo $?
0
[root@localhost scripts]# echo $a
10
Shell_条件判断(二)
在条件判断中,除了相等于不等的判断,还有一些其他的判断
两个值比较
表达式 | 含义 | 表达式 | 含义 |
---|---|---|---|
-eq | 等于(equal) | -ne | 不等于(not equal) |
-lt | 小于(less than) | -le | 小于等于(less equal) |
-gt | 大于(greater than) | -ge | 大于等于(greater equal) |
文件权限判断
-r
有读的权限(read)-w
有写的权限(write)-x
有执行的权限(execute)
文件类型判断
-e
文件存在(existence)-f
文件存在并且是一个文件类型(file)-d
文件存在并且是一个目录类型(directory)
多条件判断
&&
与的关系,两者都成立
||
或的关系,两者有一个成立
温馨提示
&&
表示前一个条命令执行成功之后,在执行第二个条件
||
表示前一个条命令执行失败之后,再执行第二个条件由此,我们可以衍生出来,类似三元运算符的形式
示例
[ $a -eq $b ] && echo "$a=$b" || echo "$a!=$b"
Shell_流程控制(一)
流程控制语句是程序中的重点知识,掌握了流程控制语句,程序的基本架构就可以搭建起来了
if
判断
基本语法
if [ 条件判断 ]; then语句
fi
if [ 条件判断 ]
then语句
fi
示例
if [ $a = 10 ];then echo 'OK'; fi
#!/bin/bash
if [ $a = 10]
then echo "ok"
fi
if [ $a = 10 -a 10 = 10 ];then echo "ok";fi
Shell_流程控制(二)
在流程控制语句中,不是单一的逻辑
基本语法
if [ 条件判断 ]
then语句
else语句
fi
#!/bin/bash
if [ $1 -lt 18 ]
thenecho "未成年"
elseecho "成年人"
fi
if [ 条件判断 ]
then语句
elif [ 条件判断 ]
then语句
else语句
fi
#!/bin/bash
if [ $1 -lt 18 ]
thenecho "未成年"
elif [ $1 -lt 35 ]
thenecho "青年人"
elif [ $1 -lt 60 ]
thenecho "壮年人"
elseecho "老年人"
fi
Shell_流程控制(三)
if
如果遇到多个条件,写起来会很麻烦,可以使用 case
改写
基本语法
case $变量名 in
"值1")语句
;;
"值2")语句
;;
...省略其他分支...
*)语句
;;
esac
注意事项
- case行结尾必须为单词"in",每一个模式匹配必须以右括号")"结束
- 双分号 ";;" 表示命令序列结束,相当于跳出当前判断语句
- 最后 "*)" 表示默认模式结尾,不符合最终的出口
#!/bin/bash
case $1 in
1)echo "值为1"
;;
2)echo "值为2"
;;
3)echo "值为3"
;;
*)echo "其他数字"
;;
esac
Shell_流程控制(四)
循环语句用于重复执行某个操作
for语句就是循环命令,可以指定循环的起点、终点和终止条件
基本语法1
for (( 初始值; 循环控制条件; 变量变化))
do语句
done
#!/bin/bash
for (( i=0;i<=100;i++ ))
dosum=$[$sum+$i]
done
echo $sum
基本语法2
for 变量 in 值1 值2 值3...
do语句
done
#!/bin/bash
for os in linux windows macos
doecho $os
done
内部运算符
在shell中,{}
是内部运算符,{}
表示一个序列,例如,从1写到100: {1..100}
#!/bin/bash
for i in {1..100}
dosum=$[$sum+$i]
done
echo $sum
$*
和$@
$*
和$@
非常相似,都代表命令行所有的参数,但是$*
把参数看成是一个整体,例如123 456
。而$@
把每个参数区分对待,例如换行显示 注意:在没有循环遍历时候,两者效果一致
#!/bin/bash
echo '=====$*====='
for param in "$*"
doecho $param
done
echo '=====$@====='
for param in "$@"
doecho $param
done
Shell_流程控制(五)
循环语句除了for
之外,还有一个while
循环
基本语法
while [ 条件判断 ]
do语句
done
#!/bin/bash
a=1
while [ $a -le $1 ]
dosum=$[$sum+$a]a=$[$a+1]
done
echo $sum
#!/bin/bash
a=1
while [ $a -le $1 ]
do
# sum=$[$sum+$a]
# a=$[$a+1]let sum+=alet a++
done
echo $sum
Shell_读取控制台输入
读取控制台信息,既简单又很实用
基本语法
read 选项 参数
-
选项:
- -p:指定读取值时候的提示符
- -t:指定读取值时候的等待时间(秒) 如果不添加
-t
表示一直等待
-
参数:
- 变量:指定读取值的变量名
read -t 10 -p "请输入您的名字:" name
echo "welcome,$name"