shell 编程中 文件判断
1文件判断
语法结构:
test 判断符 文件或者目录
[ 判断符 文件或者目录 ]
判断符:
-f 文件存在则为真
-d 目录存在则为真
-e 文件存在则为真(任意类型的文件)
-r 文件可读为真
-w 文件可写为真
-x 文件可执行为真
test -f /etc/passwd && echo 为真 || echo 为假
[ -f /etc/passwd ] && echo 为真 || echo 为假
案例: -d
如果目录不存在则创建
[ -d 10.0.0.8_2022_02_11 ] || mkdir 10.0.0.8_2022_02_11
[ -d /etc ] && mkdir /opt/`hostname`_`date +%F` && tar zcvf /opt/`hostname`_`date +%F`/etc.tar.gz /etc
案例: -f
如果有脚本变量, 则先创建一下,方便 父shell调用
[root@web00 day02]# cat env.sh
num1=100
num2=200
num3=300
cat test.sh
#!/bin/bash
[ -f /server/scripts/day02/env.sh ] && . /server/scripts/day02/env.sh
echo $num1+$num2=$[$num1+$num2]
2字符串比较
只有 等于或者不等于 这2种
[root@baimeidashu ~]#[ root != root ] && echo 等于 || echo 不等于
不等于
[root@baimeidashu ~]#[ root == root ] && echo 等于 || echo 不等于
等于
3 正则比较
[root@baimeidashu ~]#[ root != root ] && echo 等于 || echo 不等于
不等于
[root@baimeidashu ~]#[ root == root ] && echo 等于 || echo 不等于
等于
[root@baimeidashu ~]#[[ root =~ roo ]] && echo 等于 || echo 不等于
等于
[root@baimeidashu ~]#[[ root =~ r ]] && echo 等于 || echo 不等于
等于
[root@baimeidashu ~]#[[ root =~ ^r ]] && echo 等于 || echo 不等于
等于
[root@baimeidashu ~]#[[ root =~ $t ]] && echo 等于 || echo 不等于
等于
[root@baimeidashu ~]#[[ root =~ [a-z] ]] && echo 等于 || echo 不等于
等于
[root@baimeidashu ~]#[[ root =~ [0-9] ]] && echo 等于 || echo 不等于
不等于
[root@baimeidashu ~]#[[ 399 =~ [0-9] ]] && echo 等于 || echo 不等于
等于
案例:
案例: 输入的 姓名必须是 字母, 年龄必须是大于18 小于100
#!/bin/bash
read -p "请输入你的姓名:" name
echo $name
if [[ ! $name =~ ^[a-z]+$ ]]
then
echo "请输入正确的姓名不能有数字"
exit
fi
read -p "请输入你的年龄:" age
if [[ ! $age =~ ^[0-9]+$ ]]
then
echo "请输入正确的年龄,必须是数字"
exit
elif ! [ $age -gt 18 -a $age -lt 100 ]
then
echo "年龄必须大于18 小于100"
exit
echo $age
f
欢迎来撩 : shell 编程从0到1
欢迎来撩 : 汇总all