字符测试
双目测试
比较两个字符串
- == 等于,等值比较
- != 不等于
单目测试
- -n $string 判断字符串是否为空,不空为真
- -z $string 字符串是否为空,空(包括空格)为真
- -e 文件名 检测文件是否存在,若存在,则为真
- -d 文件名 检查文件是否为目录(文件夹)文件,如果使,则为真
- -r 文件名 检查该文件是否有可读
文件类型
- - 一般文件
- d 目录文件
- l 套接字文件
案例:用户交互输入一个文件,判断该文件是否是1.txt文件,是输出yes,不是输出no
#!/bin/bash
read -p "write a filename:" file
if [ -e $file ];then
if echo "$file" | grep "/1.txt"$;then
echo "yes"
else
if [ $file == "1.txt" ];then
echo "yes"
else
echo "no"
fi
else
echo "no such"
fi
for循环
脚本执行流程
- 顺序执行:默认逐条执行
- 符合条件的给予执行
- 循环执行:将同一段反复执行 for while
for格式
for 变量名 in 列表
do
循环体(要执行的代码块)
done】
生成列表的方式
- for num in 1 2 3 4 5 aaa bbb ccc;
- for num in in /bin/*;
- for num in {1..10};
- for num in `seq 1 2 10`; 10以内的奇数
- for num in `命令`;
四则运算
- +
- -
- *
- /
- %
案例:
#!/bin/bash
#执行两次的循环(当创建目录a后,第二次执行已存在的代码)
for zhixingcishu in 1 2;
do
if [ -d /tmp/a ];then
#在/tmp/a下创建file1..file10的文件
cd /tmp/a
touch file{1..10}
#创建tom和jerry的用户和用户组
useradd tom &>/dev/null
useradd jerry &>/dev/null
#将file1-5的属主和属组改为tom
for numTom in 1 2 3 4 5;
do
chown tom.tom file$numTom
done
#将file6-10的属主和属组改为jerry
for numJerry in 6 7 8 9 10;
do
chown jerry.jerry file$numJerry
done
exit 0
else
#在/tmp下创建目录文件a
mkdir -p /tmp/a
sleep 3
fi
done
案例:
#!/bin/bash
for num in {1..255}
do
ping -c1 -w1 192.168.100.$num &>/dev/null
if [ $? -eq 0 ];then
echo "192.168.100.$num is up"
else
echo "192.168.100.$num is down"
fi
done
案例:新建用户tuser1...tuser10,计算他们的uid之和
#!/bin/bash
sum=0
for num in {1..10}
do
useradd tuser$num
uid=`id -u tuser$num`
sum=$[$uid+$sum]
done
echo $sum