shell脚本-for循环
- 一、for循环:
- 1.格式:
- 2.实操:
- 3.类c语言:
一、for循环:
1.格式:
(1)for 已知的循环次数场景
for 变量名 in 【 名称范围 】
do
命令序列(执行内容,若满足循环需要做什么动作)
done 循环结束的标志
(2)死循环:
for ((;;;))
2.实操:
(1)批量添加用户:用户名都放在users里,且密码设置都是123456
for i in $(cat /opt/users.txt)
do
useradd $i
echo 123456 | passwd --stdin $i
done
[root@localhost opt]# sh test3.sh
useradd:用户“billkin”已存在
更改用户 billkin 的密码 。
passwd:所有的身份验证令牌已经成功更新。
useradd:用户“pp”已存在
更改用户 pp 的密码 。
passwd:所有的身份验证令牌已经成功更新。
useradd:用户“kritt”已存在
更改用户 kritt 的密码 。
passwd:所有的身份验证令牌已经成功更新。
useradd:用户“chanyeol”已存在
更改用户 chanyeol 的密码 。
passwd:所有的身份验证令牌已经成功更新。
useradd:用户“baekhyun”已存在
更改用户 baekhyun 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@test2 ~]# vim test.sh
for i in {1..5}
do
echo "$i"
done
[root@test2 ~]# bash test.sh
1
2
3
4
5
3.类c语言:
(1)基本格式:
for (( 表达式1 ;表达式2;表达式3 ))
do
执行内容 若满足循环则做什么动作
done for循环结束标志
表达式1:定义变量并赋值
表达式2:决定是否循环
表达式3:决定循环变量如何改变,决定循环什么时候结束
[root@test2 ~]# vim test.sh for (( i=0;i<=5;i++ )) do echo "$i" done [root@test2 ~]# sh test.sh 0 1 2 3 4 5
(2)扩展:
1.用for循环做100以内能被3整除的数: [root@test2 ~]# vim test2.sh for i in {1..20} do let q=$i%3 if [ $q -eq 0 ] then echo "$i" else echo "错误" fi done [root@test2 ~]# sh test2.sh 错误 错误 3 错误 错误 6 错误 错误 9 错误 错误 12 错误 错误 15 错误 错误 18 错误 错误 2.在指定范围内,计算出所有可以被指定的数字整除,不能整除的输出"错误",并且起始数字要大于结束数字 read -p "请输入起始数字:" start read -p "请输入结束数字:" end read -p "请输入整除的数字" num if [ $start -gt $end ] then echo "起始数字不能大于结束数字" fi for(( i=$start;i<=$end;i++ )) do let q=$i%$num if [ $q -eq 0 ] then echo "$i" else 3.用for循环做一个99乘法表: for (( i=1;i<=9;i++ )) do for (( j=1;j<=i;j++ )) do let num=$j\*$i echo -ne "$j" "*" "$i" "=" "$num" "\t" done echo "" done [root@test2 ~]# sh test3.sh 1 * 1 = 1 1 * 2 = 2 2 * 2 = 4 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16 1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25 1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36 1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49 1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
3.步长求100内偶数和:
(3)常用转义字符:
选项 | 作用 |
---|---|
-n | 表示不换行输出 |
-e | 输出转义字符,将转义后的内容输出到屏幕上 |
\b | 转义后相当于按退格键(backspace),但前提是"\b"后面存在字符 |
\c | \c 不换行输出,在"\c"后面不存在字符的情况下,作用相当于 echo -n |
\f | 换行,但是换行后的新行的开头位置连接着上一行的行尾 |
\v | 与\f相同 |
\t | 转以后表示插入tab,即横向制表符 |
\r | 光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖 |