linux执行循环程序代码,10、bash脚本编程之程序语句选择执行、循环执行

1、过程式编程语句的执行流程:

顺序执行:从上至下一次执行

选择执行:

逻辑关系:&&、||、!

if语句

单分支if语句

双分支if语句

多分支if语句

case语句

循环执行:

2、if语句格式:2.1、单分支if语句语法:

if CONDITION ;then

IF-TRUE-STATEMENT

fi

或:

if CONDITION

then

IF-TRUE-STATEMENT

fi2.2、双分支if语句语法:

if CONDITION;then

IF-TRUE-STATEMENT

else

IF-FALSE-STATEMENT

fi2.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 ~]#

示例三:写一个脚本,实现如下功能:

1、列出如下菜单给用户

disk)show disk info

mem)show memory info

cpu)show cpu info

*) quit

2、提示用户给出自己的选择,然后显示对应的相应系统信息:

[root@localhost ~]# cat choice.sh

#!/bin/bash

echo "disk)show disk info"

echo "mem)show memory info"

echo "cpu)show cpu 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 ~]#示例三:写一个脚本,实现如下功能:

1、列出如下菜单给用户

disk)show disk info

mem)show memory info

cpu)show cpu info

*) quit

2、提示用户给出自己的选择,然后显示对应的相应系统信息:

[root@localhost ~]# cat choice.sh

#!/bin/bash

cat <

"disk)show disk info"

"mem)show memory info"

"cpu)show cpu 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中,如果需要遍历列表的数量很多,怎么能快速生成这些遍历列表呢。

3.4、遍历列表[LIST]的生成方法有如下几种:

①、直接给出:如示例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之和

3、通过脚本参数传递一个目录给脚本,而后计算此目录下所有文件的行数之和;并说明此类文件的总数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值