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
例:
  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)返回列表的命令
'ls /var'
[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
返回列表的元素分隔符可是回车符或空格符
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目录下的每一个文件的内容
[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"
posted @ 2020-10-23 09:45  扬帆直上  阅读(160)  评论(0)    收藏  举报