1、过程式编程语句的执行流程:
顺序执行:从上至下一次执行
选择执行:
逻辑关系:&&、||、!
if语句
单分支if语句
双分支if语句
多分支if语句
case语句
循环执行:
2、if语句格式:
2.1、单分支if语句语法: if CONDITION ;then IF-TRUE-STATEMENT fi 或: if CONDITION then IF-TRUE-STATEMENT fi |
2.2、双分支if语句语法: if CONDITION;then IF-TRUE-STATEMENT else IF-FALSE-STATEMENT fi |
2.3、多分支if语句语法: if CONDITION1;then IF-TRUE1-STATEMENT elif CONDITION2;then IF-TRUE2-STATEMENT elif CONDITION3;then IF-TRUE3-STATEMENT elif CONDITION#;then IF-TRUE#-STATEMENT else OTHER-STATEMENT fi 注意:如果没有else语句,而所有条件又都不满足,则不会执行任何一条语句。 即使有多个条件可能同时满足,但只会执行最先匹配到的那个条件的语句 |
示例1:通过脚本参数传递一个文件路径给脚本,判断此文件的类型; [root@localhost ~]# cat type.sh #!/bin/bash if [ $# -lt 1 ];then echo "at least a arg" fi if ! [ -e $1 ];then echo "no such file" fi if [ -b $1 ];then echo "binary file" elif [ -d $1 ];then echo "directory file" else echo "other file" fi [root@localhost ~]# 注意:case语句是简化版的多分支if语句,但不是每个多分支if语句都可以写成case语句。 if语句可以嵌套。 |
示例二:编写一个脚本,实现如下功能: 传递一个参数给脚本,此参数为用户名;根据其ID号来判断用户类型。 [root@localhost ~]# cat id_usertype.sh #!/bin/bash if [ $# -lt 1 ];then echo "at least a arg:" fi if ! id $1 &>/dev/null;then echo "the user $1 is not exits,please check it" fi user_id=$(id -u $1) if [ $user_id -eq 0 ];then echo "user:$1 is root" elif [ $user_id -lt 999 ];then echo "user:$1 is system user" else echo "user:$1 is logon user" fi [root@localhost ~]# |
示例三:写一个脚本,实现如下功能: disk)show disk info mem)show memory info *) quit [root@localhost ~]# cat choice.sh #!/bin/bash echo "disk)show disk info" echo "mem)show memory info" echo "*) quit" read -p "your choice: " menu if [[ "$menu" == "disk" ]];then fdisk -l /dev/s[hd][a-z] elif [[ "$menu" == "mem" ]];then free -m elif [[ "$menu" == "cpu" ]];then lscpu else echo "quit" fi [root@localhost ~]# |
示例三:写一个脚本,实现如下功能: disk)show disk info mem)show memory info *) quit [root@localhost ~]# cat choice.sh #!/bin/bash cat <<EOF "disk)show disk info" "mem)show memory info" "*) quit" EOF read -p "your choice: " menu if [[ "$menu" == "disk" ]];then fdisk -l /dev/s[hd][a-z] elif [[ "$menu" == "mem" ]];then free -m elif [[ "$menu" == "cpu" ]];then lscpu else echo "quit" fi [root@localhost ~]# |
3、linux脚本语句之循环执行:
循环执行:将一段代码重复执行多次(零次、一次、多次)
循环执行语句的条件:
进入执行:只有满足条件时才进入循环
3.1、linux中bash脚本的循环语句分类:
①、for循环
遍历列表
控制变量
②、while循环
③、until循环
3.2、for循环的格式:
①、遍历列表
②、控制变量
3.3、for循环之遍历列表
格式1: for VARIBLE in LIST;do STATEMENT done 解释: for 变量 in 遍历列表;do 循环体语句 done |
格式2:(和if语句相似) for VARIBLE in LIST do STATEMENT done 注意:do要单独成行 |
示例:1 [root@localhost ~]# cat list.sh #!/bin/bash for username in linux1 linux2 linux3;do useradd $username done [root@localhost ~]# 解释:先将linux1赋值给username,执行一遍循环体,遇到done结束;再将linux2赋值给username,执行一遍循环体,遇到done结束,最后将linux3赋值给变量username,在执行一遍循环体。 |
示例2: [root@localhost ~]# cat list.sh #!/bin/bash for username in linux1 linux2 linux3;do if id $username&>/dev/null;then echo "the user:$username is exists" else useradd $username &> /dev/null && echo "the user:$username is added" fi done [root@localhost ~]# |
示例:3 创建10个文件: [root@localhost ~]# cat mf.sh #!/bin/bash for filename in 1 2 3 4 5 6 7 8 9 10 ;do touch file$filename done [root@localhost ~]# |
注意:如示例2中,如果需要遍历列表的数量很多,怎么能快速生成这些遍历列表呢。
①、直接给出:如示例1、2、3
②、整数列表
(a)内建功能:花括号展开,格式:{start..end} //注意此处是两个点好(.)
如:{1..10} :表示1 2 3 4 5 6 7 8 9 10
(b)seq [start [increment]] last//注意此处seq是命令,#man seq查看帮助
seq [option]... last :如seq 10 //表示列表1 2 3 4 5 6 7 8 9 10
seq [option]... first last :如seq 5 10 //表示列表 5 6 7 8 9 10
seq [option]... first increment last :first代表开始,increment代表步长,last代表结束。如seq 2 2 10,表示2 4 6 8 10
[root@localhost ~]# seq 5 10
5
6
7
8
9
10
[root@localhost ~]# seq 2 2 10
2
4
6
8
10
③、返回列表的命令:如:ls、cat等
④、golb
⑤、变量引用
$@,$* //$@表示所有参数,把所有参数当做一个字符串来看待;$*也表示所有参数,把所有参数当做一个个单独的字符串来看待。
示例4:求100以内所有的正整数之和。
[root@localhost ~]# cat sum_100.sh
#!/bin/bash
declare -x sum=0
for i in {1..100};do //通过内建功能{}实现遍历
echo "\$sum is $sum"
echo "\$i is $i"
sum=$[ $sum+$i ]
done
echo "sum is $sum"
[root@localhost ~]#
示例5、
判断/var/log目录下的每个文件的类型;(可以通过file /var/log来查看,此处做练习for)
[root@localhost ~]# cat glob.sh
#!/bin/bash
for file in /var/log/*;do//glob格式的遍历列表
if [ -f file ];then
echo "$file is putongwenjian"
elif [ -d $file ];then
echo "$file is diretory file"
elif [ -c $file ];then
echo "$file is character file"
elif [ -p $file ];then
echo "$file is pipe file"
elif [ -b $file ];then
echo "$file is block file"
elif [ -L $file ];then
echo "$file is link file"
elif [ -S $file ];then
echo "$file is socket file"
else
echo "no type file"
fi
done
[root@localhost ~]#
练习:用脚本实现如下功能
1、分别求100以内的所有偶数之和,及所有奇数之和。
2、计算当前系统上的所有用户的id之和
原文链接:https://www.f2er.com/bash/389423.html