1.8 for循环
常用循环有for 和 while ,而for是只用的最多的。
seq是产生序列的命令
seq 1 10 打印1到10的数字。
seq 1 2 10 打印1到10的数字,并且每两个打印一次。
seq 01 10 打印指定的位数的数列,安装最长的生成。
seq 01 -1 10 打印从10到1的数列
seq -w 1 10 是做从一到十排序。
例如1:
#vim for1.sh
内容如下:
#!/bin/bash
for i in 'seq 1 10';
do
保持退出;运行:
#sh for1.sh
例如2:
#vim for2.sh
内容如下:
#!/bin/bash
#定义变量$i为循环
for i in {1..10}
do
echo $i
done
保持退出;运行:
#sh for2.sh
例1和例2是一样的结果,其中i是自定义的变量。
例如3:
#vim for3.sh
内容如下:
#!/bin/bash
#输出变量求和
#想定义sum变量,sum=0
sum
for i in {1..10}
do
sum=$[$sum+$i]
done
echo ''$sum
#echo 是打印变量$sum的值
保持退出;运行:
#sh for3.sh
例如4:
将/etc/passwd的内容写到1.txt中,将1.txt的没以后作为运行条件,
cat /etc/passwd > 1.txt
#vim for4.sh
内容如下:
#!/bin/bash
for l in 'cat 1.txt'
do
echo $l
done
保持退出;运行:
#sh for4.sh
例4的结果可以到显示和我们cat看到的不一样,因为一行中有空格会按两次输出。这个可以自己编写一个小文档自己练习一下,这里就不再做做举例了。
例如:
做分发的任务,将ip写到一个文档ip.txt中。
可以在done前面加入要执行的命令,
#for ip in 'cat ip.txt'; do echo $ip;ssh $ip "w"; done
循环一个文件夹
#for file in 'ls'; do echo $file; done
查看文件夹大小
#for file in 'ls'; do echo $file; du -sh $file; done
1.9 while循环
while大多使用情况是死循环,用于监控,
格式:
#!/bin/bash
while
do
执行的任务
done
例如1:
#vim while1
内容如下:
#!/bin/bash
#每隔三秒输出一个结果":"表示永久针
while :
do
date +%T
sleep 3
done
保存退出;运行
sh while1.sh
例如2:
#vim while2
内容如下:
#!/bin/bash
n=0
while [ $n -le 10 ]
do
echo $n
n=$[$n+1]
done
保持退出;运行
这里个例子的可以把n的值换成文件或者分区大小,while里面的判断条件可以换成达到多少的值,do后面的可以改成要执行的任务。
while交互有点疑问,没有写例如:需要自己学习一下
2.0 shell中断继续退出
控制循环的关键词:break continue exit
例如1:
vim for5.sh
内容如下:
#!/bin/bash
#
for i in 'seq 1 10'
do
echo $i
if [ $i -eq 4 ]
then
break
fi
echo $i
echo "这个shell还存活。"
done
保持退出;运行sh -x for5.sh
在例如5中将break分别替换成continue和exit。查看结果
break 是接受整个for循环
continue是接触本次运行,继续往下执行
exit 是直接退出shell任务
2.1 shell函数
函数里面的还是可以在外面使用,当在定义函数是我们在函数前面加local 就成了局部变量。
对比下面的例如1和例如2。 其中:function可以省略,function是局部的意思,
例如1:
vim fun1.sh
内容如下:
#!/bin/bash
function mysum() {
sum =$[$1+$2]
echo $sum
}
a=1
b=2
mysum $a $b
#调用{ }内的变量
echo $sum
保持退出;运行
例如1:
vim fun2.sh
内容如下:
#!/bin/bash
function mysum() {
local sum =$[$1+$2]
echo $sum
}
a=1
b=2
mysum $a $b
#调用{ }内的变量
echo $sum
保持退出;运行
2.2 shell数组
数组的定义和赋值
赋值括号内的是数组:a=(1 2 3 4)
编辑回复