shell循环
echo
echo -n 表示不换行输出 echo -e 表示输出转义符 常用的转义符
\r | 光标移至行首,并且不换行 |
\s | 当前shell的名称,如bash |
\t | 插入Tab键,制表符 |
\n | 输出换行 |
\f | 换行,但光标仍停留在原处 |
\ | 表示插入"\"本身转义 |
\b | 表示退格 不显示前一个字符 |
\c | 抑制更多的输出或不换行 |
例如:
[root@server1 ~]# echo -n "Hello, ";echo "world"
Hello, world
[root@server1 ~]# echo -e "Hello\nworld"
Hello
world
date
date查看当前系统时间
-d 你描述的日期,显示指定字符串所描述的时间,而非当前时间
%F 完整日期格式,等价于 %Y-%m-%d
% T 时间(24小时制)(hh:mm:ss)
cal查看日期
seq
for
列表循环
for 变量名 in {list} do command done
花括号{}和seq在for循环的应用: for i in {1..50..2} 1-50的奇数 for i in {2..50..2} 1-50的偶数 for i in {10..1} 1-10倒序排列 for i in $(seq 10) 1-10正序排列 for i in $(seq 10 -1 1) 1-10倒序排列 for i in $(seq 1 2 10) 1-10的奇数,中间为步长
for 变量名 do command done
例1:打印hello 第一种: [root@server ~]# vim for2.sh #!/bin/bash for i do echo hello done [root@server ~]# . for2.sh #没有给脚本传参所以执行了没有结果 [root@server ~]# . for2.sh a #把a赋值给变量i,i有值了它就开始执行do..done了 hello
for ((expr1;expr2;expr3)) do command done expr1:定义变量并赋初值 expr2:决定是否循环 expr3:决定循环变量如何改变,决定循环什么时候退出 sum=1 i2=2 sum+=i 等于 sum=sum+i #需要使用 let 命令 ++ 自身变量+1 -- 自身变量-1 +=5 自身变量+5 -=5 自身变量-5 *=5 自身变量*5 /=5 自身变量/5 %=5 自身变量%5
[root@server ~]# vim for3.sh #!/bin/bash for ((i=1;i<=10;i+=2)) //i=i+2 do echo $i done
[root@server1 ~]# vim addUser.sh
#!/bin/bash for i in `cat ~/name.txt` do id $i &> /dev/null if [ $? -eq 0 ];then echo "${i}该用户已存在" else useradd $i echo "123"|passwd ${i} --stdin fi done
执行脚本,用户创建成功:
再次执行:
while
while : do done
######求和########### #!/bin/bash i=0 sum=0 while [ $i -le 100 ] do let sum+=$i let i+=2 done echo $sum
###############批量建立用户################################## #!/bin/bash i=0 while [ "${i}" -le 20 ] do useradd stu${i} echo "123456" |passwd --stdin stu${i} &>/dev/null if [ $? -eq 0 ] then echo "用户 stu${i} 被建立" else echo "用户 stu${i} 建立失败" fi let i++ done
##############猜价格游戏########################## #!/bin/bash p=`echo $[RANDOM%1000+1]` t=0 while true do read -p "请输入商品的价格1-1000:" num let t++ if [ $num -eq $p ] then echo "恭喜你猜中了,实际价格是$p" echo "您一共猜了${t}次" exit 0 elif [ $num -gt $p ] then echo "您猜的价格高了" else echo "您猜的价格低了" fi done
-
-
continue终止某次循环中的命令,但是不会完全终止命令
-