在一定条件之内重复一个动作,可以通过代码需要执行重复执行的动作,节约了大量的时间,提高了脚本的复用率。
读取不同的变量值,用来逐个执行同一组命令
格式:
for 变量名 in 取值对象
do
命令序列
done
echo -n:表示不换行输出
echo -e:输出转义字符,将转义后的内容输出到屏幕上
常用的转义字符如下(只有echo -ne)加了e才能执行):
\b:转义后相当于按退恪键(backspace),但前提是"\b"后面存在字符;""b"表示删除前一个字符,""bb"表示删除前两个字符。
\c:不换行输出,在""c"后面不存在字符的情况下,作用相当于echo -n;但是当""c"后面仍然存在字符时,"kc"后面的字符将不会被输出。in换行,被输出的宁符从"In"处开始另起一行.
\f:换行,但是换行后的新行的开头位詈连接着上一行的行尾;w与f相同;
\t:转以后表示插入tab,即横向制表符;
\r:光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖
\表示插入""本身。
要求:用户名存放在users.txt文件中,每行一个
初始密码均设为123456
验证脚本
for i in $(cat /opt/users.txt)
do
useradd $i
echo 123456 | passwd --stdin $i
done
要求:IP地址存放在iPadds.txt文件中,每行一个
使用ping命令检测各主机的连通性
并将ping通的地址保存在/opt/hosts.txt文件中
for i in $(cat /opt/ipadds.txt)
do
ping -c 3 $i
if [ $? -eq 0 ]
then
echo $i >> /opt/hosts.txt
fi
done
格式1:
set -x——开启调试模式
for i in {1..5}
do
echo $i
done
set +x————关闭调试模式
格式2:
类c语言写法
for ((i=1;i<=5;i++))
do
echo $i
done
set -x
sum=0
for ((i=1;i<=100;i++))
do
sum=$[$sum+$i]
echo $sum
done
set +x
num1=0
num2=0
for i in {1..10}
do
if (( $i % 2 == 0 ))
then
num1=$(($num1+$i))
else
num2=$(($num2+$i))
fi
done
echo $num1
echo $num2
跳跃,每次加2,一直到10
for i in `seq 2 2 10`
do
echo $i
done
sum=0
for i in `seq 2 2 100`
do
sum=$(($i+$sum))
done
echo $sum
sum=0
for i in `seq 1 2 100`
do
sum=$(($i+$sum))
done
echo $sum
for i in {1..9}——————————打印行几次循环1-9
do
for ((j=1;j<=i;j++))——————循环1-9,每次都要小于i
echo -ne "$i*$j=$[$i*$j]\t"———— -n不换行,-e使用转义符
done
echo————每循环一次后从下一行开始
done
提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密码,建立用户并设立其密码
检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数
用for循环算出 某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了,请问这只猴子在第一天总共摘了多少根香蕉?