Linux学习之shell3

For 循环

语法1

语法1

for 变量 in 值1 值2 值3 …(可以是一个文件等)
	do
		程序
	done
	
这种语法中for循环的次数,取决于in后面值的个数(空格分隔),可以看出遍历列表
有几个值就循环几次,并且每次循环都把值赋予变量。

假设in后面有三个值,for会循环三次,第一次循环会把值1赋予变量,第二次循环会把值2赋予变量,以此类推。

测试

for var in 1 2 3 4 5
	do
		echo $var
	done

[root@VM-12-14-centos ~]# ./test5.sh
1
2
3
4
5

拷贝所有sh文件到某个目录

#创建一个log文件
touch sh.log

#把所有.sh结尾的文件的文件覆盖到sh.log 临时文件中
ls *.sh > sh.log

#读取ls.log文件的内容,文件中有多少个值,就会循环多少次,每次循环把文件名赋予变量i
for i in $(cat sh.log)
	do
		#批量拷贝到$1目录
		cp -r $i $1
	done

#删除临时文件sh.log
rm -rf sh.log

运行结果

[root@VM-12-14-centos ~]# ll sh
total 0
[root@VM-12-14-centos ~]# vim test6.sh
[root@VM-12-14-centos ~]# ./test6.sh sh
[root@VM-12-14-centos ~]# ll sh
total 96
-rw-r--r-- 1 root root   773 Oct 10 19:15 centos7.sh

语法2

for (( 初始值;循环控制条件;变量变化 ))
	do
		程序
	done
	
语法2中需要注意:
初始值:在循环开始时,需要给某个变量赋予初始值,如i=1;

循环控制条件:用于指定变量循环的次数,如i<=100,则只要i的值小于等于100,循环就会继续;

变量变化:每次循环之后,变量该如何变化,如i=i+1。代表每次循环之后,变量i的值都加1。

测试

简单的累加器

#求两个数中间的值相加的和(包含者两个数)
sum=0
if $1 -lt $2 
then
	for (( i=$1;i<=$2;i=i+1 ))
	do
		#每次循环给变量sum赋值
		sum=$(( $sum+$i ))
	done
	#输出$1加到$2的和
	echo "$sum"
else
	for (( i=$2;i<=$1;i=i+1 ))
	do
		#每次循环给变量sum赋值
		sum=$(( $sum+$i ))
	done
	#输出$2加到$1的和
	echo "$sum"
fi

[root@VM-12-14-centos ~]# vim test7.sh
[root@VM-12-14-centos ~]# ./test7.sh 1 2
3
[root@VM-12-14-centos ~]# ./test7.sh 1 9
45
[root@VM-12-14-centos ~]# ./test7.sh 5 1
15

while循环

对while循环来讲,只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。

while [ 条件判断式 ]
    do
        程序
    done

测试

输出这个数到10的所有数(包括它本身)
s=$1
while [ $s -gt 10 ]
	do
		echo $s
		s=$(( $s+1 ))
	done

[root@VM-12-14-centos ~]# ./test8.sh 2
2
3
4
5
6
7
8
9
[root@VM-12-14-centos ~]# ./test8.sh 5
5
6
7
8
9

一个简单的猜数字小游戏

rund=$(expr $RANDOM % 1000)
times=0

echo "商品的价格为0-999之间"
while true
do
  read -p "输入价格:" sum
let times++
	if [ $sum -eq $rund ] ; 
	then
	  echo "猜对了,实际价格是 $rund"
	  echo "总共猜了 $times 次"
	exit 0
	elif [ $sum -gt $rund ] ; 
	then
	  echo "太高了"
	else
	  echo "太低了"
	fi
done

[root@VM-12-14-centos ~]# ./test9.sh
商品的价格为0-999之间
输入价格:500
太低了
输入价格:750
太低了
输入价格:850
太低了
输入价格:950
太高了
输入价格:900
太低了
输入价格:925
太高了
输入价格:920
太低了
输入价格:922
猜对了,实际价格是 922
总共猜了 8 次

until循环

和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。

语法:

until [ 条件判断式 ]
	do
		程序
	done

测试

i=1
sum=0
#当变量i的值大于100,停止循环
until [ $i -gt 100 ]
	do
		s=$(( $s+$i ))
		i=$(( $i+1 ))
	done
echo "$s"

[root@VM-12-14-centos ~]# ./test10.sh
5050

函数

function 函数名 () {
    程序
}

测试

#接收用户输入的数字,然后从1加到这个数字

function sum () {
	s=0
	for (( i=0; i<=$num;i=i+1 ))
		do
			s=$(( $i+$s ))
		done
	echo "$s"
}

read -p "Please input a number: " -t 30 num

[root@VM-12-14-centos ~]# ./test11.sh
Please input a number: 5
15
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值