shell脚本基础(七)
bash脚本之多分支if语句
if CONDITION1;then
条件1为真分支
elif CONDITION2;then
条件2为真分支
elif CONDITION3;then
条件3为真分支
...
elif CONDITION;then
条件N为真分支
else
所有条件都不满足时的分支
fi
注意:即便多个条可能同时都满足,分支只会执行其中一个,首先测试为真的值
注意:if语句可以嵌套使用
例:脚本参数传递一个文件路径给脚,判断此文件类型
#!/bin/bash
#list
if [ $# -lt 1 ];then
echo "at least one path"
exit 1
fi
if ! [ -e $1 ];then
echo "no such file"
exit 2
fi
if [ -f $1 ];then
echo "Common file"
elif [ -d $1 ];then
echo "Directory"
elif [ -L $1 ];then
echo "Symbolic link"
elif [ -b $1 ];then
echo "block special file"
elif [ -c $! ];then
echo "character special file"
elif [ -S $1 ];then
echo "Socket file"
else
echo "Ukown"
fi
例:
例:
'ls /var'
1.传递一个参数给脚本,此参数为用户名
2.据据其ID号来判断用户类型
0:管理员
1-999 系统用户
1000+登陆用户
1 #!/bin/bash
2 #
3 if [ $# -lt 1 ];then
4 echo "please entry a username."
5 exit 1
6 fi
7
8 if ! id $1 &>/dev/null;then
9 echo "no such user"
10 exit 2
11 fi
12
13 userid=$(id -u $1)
14 if [ $userid -eq 0 ];then
15 echo "admin"
16 elif [ $userid -ge 1000 ];then
17 echo "login"
18 else echo "system"
19
20 fi
写一个脚本
1)列出以下菜单给用户
disk)show disks info
men)show memory info
cpu)show cpu info
*)quit
2)提示用户给出自己的选择,而后显示对应其选择的相应系统信息
1 #!/bin/bash
2 #
3 cat << EOF
4 disk)show disks info
5 men)show memory info
6 cpu)show cpu info
7 *)quit
8 EOF
9
10 read -p "please enter a OPT:" option
11 if [ "$option" == 'disk' ];then
12 fdisk -l /dev/sd[a-z]
13 elif [ "$option" == 'men' ];then
14 free -m
15 elif [ "$option" == 'cpu' ];then
16 lscpu
17 else
18 echo "IS unkown" && exit 1
19 fi
bash脚本之循环执行:将一段代码重复执行0、1或多次
循环进入条件:条件满足时才进入循环
循环退出条件:每个循环都应该有退出条件,以有机会退出循环
for循环
两种格式
1)遍历列表
for VARAIBLE in list;do
循环体
done
进入条件:只要列表有可用元素,即可进入循环
退出条件:列表中的元素遍历完成
例: for username in user21 user22 user23;do
useradd $username
done
list生成方式
1)直接给出
2)整数列出
a){start..end}
b)$(seq)
seq [OPTION]... FIRST INCREMENT LAST 序列输出
seq 1 2 100 奇数序列
seq 2 2 100 偶数序列
例:100以内所有正整数之和
sum=0+1
sum=sum+2
sum=sum+3
sum=1+2+3+..+100
declare -i sum=0
for i(计数器) in {1..100};do
sum=$[ $sum + $i]
done
echo $sum
3)返回列表的命令
[root@Centos-7-24 ~]# ls /var
adm cache crash db empty games gopher kerberos lib local lock log mail nis opt preserve run spool tmp yp
adm cache crash db empty games gopher kerberos lib local lock log mail nis opt preserve run spool tmp yp
返回列表的元素分隔符可是回车符或空格符
4)glob通配符
'ls /var/log/p*'
[root@Centos-7-24 ~]# ls /var/log/b*
/var/log/boot.log /var/log/boot.log-20201003 /var/log/boot.log-20201009 /var/log/boot.log-20201010 /var/log/boot.log-20201016 /var/log/boot.log-20201021 /var/log/btmp
/var/log/boot.log /var/log/boot.log-20201003 /var/log/boot.log-20201009 /var/log/boot.log-20201010 /var/log/boot.log-20201016 /var/log/boot.log-20201021 /var/log/btmp
例:判断/var/log目录下的每一个文件的内容
[root@Centos-7-24 opt]# vim test8.sh
1 #!/bin/bash
2 #
3 for file in /var/log/*;do
4
5 if [ -f $file ];then
6 echo "Common file"
7 elif [ -d $file ];then
8 echo "Directory"
9 elif [ -L $file ];then
10 echo "Symbolic link"
11 elif [ -b $file ];then
12 echo "block special file"
13 elif [ -c $file ];then
14 echo "character special file"
15 elif [ -S $file ];then
16 echo "Socket file"
17 else
18 echo "Ukown"
19 fi
20
21 done
5)变量引用
$@,$*
例:
1.分别求100以内所有偶数之和,以及所有奇数之和
1 #!/bin/bash
2 #
3
4 declare -i sum1=0
5 declare -i sum2=0
6 for i1 in $(seq 2 2 100);do
7 echo "\$i1 is $i1"
8 sum1=$[$sum1+$i1]
9 done
10
11 for i2 in $(seq 1 2 100);do
12 echo "\$i2 is $i2"
13 sum2=$[$sum2+$i2]
14 done
15
16 echo "\$sum1 is $sum1"
17 echo "\$sum2 is $sum2"
18 sum=$[$sum1+$sum2]
19 echo "\$sum is $sum"
浙公网安备 33010602011771号