每天学习一个shell技能(6)
test
test文件
if test -e ./test.sh
then
echo '文件已存在!'
else
echo '文件不存在!'
fi
- -e fileName : 如果文件存在则为真
- -r fileName : 如果文件存在且可读则为真
- -w fileName : 如果文件存在且可写则为真
- -x fileName : 如果文件存在且可执行则为真
- -s fileName: 文件存在且至少有一个字符
- -d fileName : 文件存在且为目录
- -f fileName: 文件存在且为文件
- -c fileName:文件存在,且为字符型特殊文件
- -b fileName: 如果文件存在且为块特殊文件则为真
test字符串
- = :等于则为真
- != :不等于则为真
- -z : 字符串长度为零则为真
- -n : 字符串长度不为零则为真
数值测试
- -eq :等于
- -ne : 不等于
- -gt:大于
- -lt:小于
- -ge:大于等于
- -le: 小于等于
流程控制(条件)
if
if condition
then
command1
command2
...
commandN
fi
if else
if condition
then
command1
command2
...
commandN
else
command
fi
if else-if else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
实例 用法:
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
控制流(for 循环)
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
改成一行:
for var in item1 item2 ... itemN; do command1; command2… done;
while
while condition
do
command
done
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
无限循环:
while :
do
command
done
// 或者
while true
do
command
done
// 或者
for (( ; ; ))
until 循环
until condition
do
command
done
case in
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
跳出循环
break
break命令允许跳出所有循环(终止执行后面的所有循环)
continue
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环
while :
do
echo -n "输入 1 到 5 之间的数字: "
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的!"
continue
echo "游戏结束"
;;
esac
done
esac
case的语法和C family语言差别很大,它需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两个分号表示break。