Shell表达式
条件表达式
文件表达式
# 文件表达式
if [ -e file ] 为文件,则为真
if [ -d … ] 为目录,则为真
if [ -f file ] 是否为常规文件,则为真
if [ -s file ] 如果文件存在且非空
if [ -r file ] 如果文件存在且可读
if [ -w file ] 如果文件存在且可写
if [ -x file ] 如果文件存在且可执行
if [ -L filename ] 如果 filename为符号链接,则为真
if [ -h filename ] 如果文件是软链接,则为真
if [ filename1 -nt filename2 ] 如果 filename1比 filename2新,则为真。
if [ filename1 -ot filename2 ] 如果 filename1比 filename2旧,则为真。
eg:
if test -d /data //判断目录是否存在
整数变量表达式
# 整数变量表达式
if [ int1 -eq int2 ] 如果int1等于int2
if [ int1 -ne int2 ] 如果不等于
if [ int1 -ge int2 ] 如果>=
if [ int1 -gt int2 ] 如果>
if [ int1 -le int2 ] 如果<=
if [ int1 -lt int2 ] 如果<
字符串变量表达式
# 字符串变量表达式
If [ $a = $b ] 如果string1等于string2
# 字符串允许使用赋值号做等号
if [ $string1 != $string2 ] 如果string1不等于string2
if [ -n $string ] 如果string 非空(非0),返回0(true)
if [ -z $string ] 如果string 为空则是真
if [ $sting ] 如果string 非空,返回0 (和-n类似)
# 前面是否包含后面
if [[ "${apps[@]}" =~ "$i" ]];then
# 判断是否为数字
## 方法1
a=1234;
echo "$a"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] && echo string a is numbers
# 第一个-n是shell的测试标志,对后面的串"`sed -n '/^[0-9][0-9]*$/p'`" 进行测试,如果非空,则结果为真。
# sed默认会显示所有输入行信息的,sed 的“-n”选项是让sed不要显示,而只显示我们所需要的内容:即后面的表达式所匹配的行,
# 这是通过表达式中加入“p”命令来实现的。
# /^[0-9][0-9]*$/他的含义是匹配至少由一位数字构成的行
数组
我们也可以使用下标来定义数组:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
使用@ 或 * 可以获取数组中的所有元素
echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
循环
while循环
while无限循环
# 第一种
while (1)
do
command
done
# 第二种
while true
do
command
done
# 第三种
while :
do
command
done
for循环
for i in {1..5}
do
echo $i
done
for ((i=1;i<5;i++))
do
echo $i
done
for i in `seq 5`
do
echo $i
done