linux系统中的shell分支循环语句

目录

分支循环语句

一、分支语句

二、循环语句

1.for循环

2.while循环


分支循环语句

一、分支语句

 #if 或 elif 后面跟的条件,事实上是一条可执行的程序,判断的依据是该程序是否执行成功
 ​
 if 条件 
 then 
     命令
 fi
 ​
 如果脚本的参数少于3个,则提示用户需要3个参数
 if [ $# -lt 3 ]
 then
     echo "Sorry,it needs 3 args"
 fi
 if 条件; then
     命令
 fi
 ​
 if 条件; then
     命令1
 else
     命令2
 fi
 ​
 提示用户输入他的账号,并显示欢迎信息,如为空则提示:
 echo "Please input your name: "
 read NAME
 if [ "$NAME" = "" ]; then
     echo "Your name is null"
 else
     echo "Welcom, $NAME"
 fi
 ​
 # 用grep查找也可按查找到的具体行数进行判断: grep -c ^$NAME /etc/passwd

利用多支语句完成以下内容:

请完善以下脚本,明确提醒用户,如果输入参数错误,则给予中文提示,如果参数中给定的文件不存在,基于中文不存在的提示。

 #!usr/bin/bash
 # 通过参数来决定对某个文件进行查找,并输出响应行号和行数,只接受一个参数
 filename=$1
 ​
 grep -n root $filename

答案一:

 #!/usr/bin/bash
 # 通过参数来决定对某个文件进行查找,并输出相应行数和行号,只接受一个参数
 ​
 #参数个数必须是1个,或者至少1个
 #参数个数正确后,则需要确认文件存在
 ​
 if [ $# -ne 1 ];then  #如果文件个数不为1
     echo "请输入一个参数"
 elif [ ! -e $1 ];then  #如果文件$1不存在
     echo "您输入的文件不存在"
 else
     grep -n root $1
 fi

image-20231003164011890

答案二:

 if [ $# -eq 1 -a -e $1 ];then
     grep -n root $1
 else
     echo "您输入的参数有误或不正确"
 fi

image-20231003164836096

 # 所有的case...in的多重分支,均可用if...elif...elif...else代替
 ​
 case $1 in
     1)
         echo "Monday"
         ;;
     2)
         echo "Tuesday"
         ;;
     3)
         echo "Wednesday"
         ;;
     4)
         echo "Thursday"
         ;;
     5)
         echo "Friday"
         ;;
     6)
         echo "Saturday"
         ;;
     7)
         echo "Sunday"
         ;;
     *)
         echo "Error"
 esac

image-20231003170350215

二、循环语句

1.for循环

 for 变量名 in 列表
 do
     命令
 done

 以脚本的参数作为循环依据,将参数输出
 #for loop in 1 2 3 4 5 6
 for loop in "$@"
 do  
     echo $loop
 done

计算从1加到10的结果
sum=0
for i in 1 2 3 4 5 6 7 8 9 10; do
	sum = `expr $sum + $i`
	#let sum=sum+i
	#let sum+=i
	#((sum+=i))  #双括号表达式,用于计算
done
echo "整数1加到10的结果为:$sum"

双括号表达式的好处在哪里呢?

image-20231003212003359

双括号表达式的作用凸显在计算和赋值这一方面中

上面方框中也就是下面图中用#注释掉的方法都是正确的

image-20231003211656084

image-20231003211625496

#统计出某个目录下有多少文件
counter=0
for file in `ls`
do
	counter=`expr $counter + 1`    #也可以使用let counter+=1 或 ((counter+=1))
done
echo "There are $counter files in `pwd`"
#注意counter赋值时等候前后不能有空格,否则会被认为counter是一条命令

练习:
1.运算脚本所有参数的乘积,如果参数中包含0,则提示用户
2.求1~100之间的所有整数和

for i in {1..100}
while 条件
do
	命令
done	

image-20231003212657636

image-20231003212711111

2.while循环

image-20231003213235227

image-20231003213250165

根据参数1决定循环次数,并将每次结果输出:
i=0
while [ $i -lt $1 ]
do
	echo "Hello, $i"
	i=`expr $i + 1`
done

从某文件中一行一行读取内容,并将其加上引号输出:
line=1
while read FILE
do
	echo "$line: $FILE"
	line=`expr $line + 1`
done < /etc/group

image-20231003214540667

image-20231003214558855

我们可以理解为:

以 /etc/group 这个文件作为 FILE 然后用 read 去一行一行的读取 FILE ,并在每一行前面输出行号

从某文件中一行一行读取内容,并将其中用空格或TAB分隔的内容按列输出:
Data文件为:
NAME	EMAIL		PHONE
Denny	dq@qq.com	123456789
Qiang	qq@dd.net	789456123
Angel	an@12.cn	087y8438

代码为:
line=0
while read NAME	EMAIL PHONE
do
	line=`expr $line + 1`
	if [ $line -eq 1 ]
	then 	
		continue
	fi
	
	echo "----$line----"
	echo "$NAME"
	echo "$EMAIL"
	echo "$PHONE"
done < $1




以下代码如果使用break,则只会输出1,2,3,4,如果使用continue,1到10中则只有5不会输出
i=0
while [ $i -lt 10 ]
do
	i=`expr $i + 1`
	if [ $i -eq 5 ]; then
		#continue
		break
	fi
	echo $i
done


#break会直接跳出整个循环,此时所有循环都会结束,在这里就是跳出while循环,而continue只是跳出当前小循环,在这里就是跳出i等于5的情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值