shell控制结构语句

时间:2022-11-28 18:53:25
test -f <filename>
if test -f fred.c
then
...
fi

你还可以写成下面这样:
if [-f fred.c]
then
...
fi
注意[ 符号和被检查打条件之间留出空格,
if 如果和放在同一行,要用分号将test语句和then分隔开.
if [ -f fred.c ]; then

test命令后面跟的条件分为三种,字符串比较,算数比较,文件有关的条件测试

1.字符串比较
string1 = string2 如果两个字符串相同结果为真
strng1 != string2 如果两个字符串不同则结果为真
-n string 如果字符串部位空则结果为真
-z string 如果字符串为null 则结果为真

2.算术比较
express -eq express2 如果两个表达式相等则结果为真
express -ne express2 如果两个表达式结果不等则为真
express -gt express2 如果express > express2 则结果为真
express -ge express2 如果express >= express2 则结果为真.
express -lt express2 如果express < express2 则结果为真.
express -lt express2 如果express <= express2 则结果为真
!express 如果表达式为假则结果为真,反之亦然

3.文件条件测试
-d file 如果文件是一个目录则结果为真
-e file 如果文件存在则结果为真
-f 如果文件是一个普通文件则结果为真
-g file 如果文件打set-group-id 位被设置则结果为真
-r file 如果文件可读则结果为真
-s file 如果文件大小>0则结果为真
-u file 如果文件的set-user-id位被设置则结果为真
-w file 如果文件可写则结果为真
-x file 如果文件可执行则结果为真

set-group-id set-user-id 也叫set-gid set-uid
set-uid授予程序拥有者打访问权限而不是使用者打访问权限
set-gid 授予程序所在组打访问权限,这两个特殊位通过chmod命令的选项s和g设置的

set-gid和set-uid 标志对shell脚本程序不起作用,对可执行打二进制文件有用

测试的例子
if [ -f /bin/bash ]
then
echo "file /bin/bash exists"
fi
if [ -d /bin/bash ]
then
echo "/bin/bash is a directory"
else
echo "/bin/bash is not a directory"
fi

for variable in values
do
statements
done

while condition do
statements
done

until condition
do
statements
done

case variable in
pattern) statements;;
pattern) statements;;
esac


pattern 匹配还可以[Yy][Ee][Ss]

and列表
touch file_one
rm -f file_two
if [ -f file_one ] && echo "hello" && [ -f file_two ] && echo " there"
then
echo "in if"
else
echo "in else"
fi
exit 0
touch file_one 检查文件是否存在 如果不存在就创建他

or 列表
rm -f file_one
if [ -f file_one ] || echo "hello" || echo "there"
then
echo "in if"
else
echo "in else"
fi
exit 0