一.echo命令和date命令
echo命令:
echo 换行
echo -n 表示不换行输出
echo -e 输出转义字符,将转义后的内容输出到屏幕上
[root@qiaozhi ~]# echo -e "123456"
123456
[root@qiaozhi ~]# echo -n "123456"
123456[root@qiaozhi ~]#
[root@qiaozhi ~]# echo
[root@qiaozhi ~]#
选项 | 含义 |
\n | 输出换行 |
\r | 光标移至行首,并且不换行 |
\s | 当前shell的名称,如bash |
\t | 插入Tab键 |
\f | 换行,但光标仍停留在原处 |
\ \ | 表示插入"\"本身 |
\b | 表示退格 不显示钱一个字符 |
\c | 抑制更多的输出或不换行 |
date命令:
date查看当前系统时间:
- -d 你描述的日期,显示指定字符串所描述的时间,而非当前时间
- %F 完整日期格式,等价于 %Y-%m-%d
- % T 时间(24小时制)(hh:mm:ss)
[root@qiaozhi ~]# date -d "-3 day"
2021年 10月 24日 星期日 14:28:27 CST
[root@qiaozhi ~]# date -d "+3 day"
2021年 10月 30日 星期六 14:28:37 CST
[root@qiaozhi ~]# date -d "+3 day" +%F
2021-10-30
[root@qiaozhi ~]# date -d "+3 day" +%T
14:29:27
查看日历QAQ
[root@qiaozhi ~]# cal 2021
2021
一月 二月 三月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 1 2 3 4 5 6 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 28 29 30 31
31
四月 五月 六月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 3 1 1 2 3 4 5
4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12
11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19
18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26
25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30
30 31
七月 八月 九月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 3 1 2 3 4 5 6 7 1 2 3 4
4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11
11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18
18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25
25 26 27 28 29 30 31 29 30 31 26 27 28 29 30
十月 十一月 十二月
日 一 二 三 四 五 六 日 一 二 三 四 五 六 日 一 二 三 四 五 六
1 2 1 2 3 4 5 6 1 2 3 4
3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25
24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31
31
二.for循环语句
执行机制:
依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束。
for 变量名 in 取值列表
do
命令序列
done
例子:
#!/bin/bash\
for i in {1..10}
do
echo $i
done
[root@qiaozhi ky15]# bash ss.sh
1
2
3
4
5
6
7
8
9
10
求从1加到100的和
#!/bin/bash
sum=0
for i in {1..100}
do
sum=$[sum+i]
done
echo "求和结果:$sum"
[root@qiaozhi ky15]# bash qiuhe.sh
求和结果:5050
ping主机测试
#/bin/bash
for i in 192.168.32.{1..5}
do
ping -c 3 $i
if [ $? -eq 0 ]
then
echo "该主机在线"
else
echo "该主机不在线"
fi
done
[root@qiaozhi ky15]# bash ping.sh
PING 192.168.32.1 (192.168.32.1) 56(84) bytes of data.
64 bytes from 192.168.32.1: icmp_seq=1 ttl=128 time=0.231 ms
64 bytes from 192.168.32.1: icmp_seq=2 ttl=128 time=0.310 ms
64 bytes from 192.168.32.1: icmp_seq=3 ttl=128 time=0.312 ms
--- 192.168.32.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.231/0.284/0.312/0.040 ms
该主机在线
PING 192.168.32.2 (192.168.32.2) 56(84) bytes of data.
64 bytes from 192.168.32.2: icmp_seq=1 ttl=128 time=0.204 ms
64 bytes from 192.168.32.2: icmp_seq=2 ttl=128 time=0.285 ms
64 bytes from 192.168.32.2: icmp_seq=3 ttl=128 time=0.124 ms
--- 192.168.32.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.124/0.204/0.285/0.066 ms
该主机在线
PING 192.168.32.3 (192.168.32.3) 56(84) bytes of data.
From 192.168.32.96 icmp_seq=1 Destination Host Unreachable
From 192.168.32.96 icmp_seq=2 Destination Host Unreachable
From 192.168.32.96 icmp_seq=3 Destination Host Unreachable
--- 192.168.32.3 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2004ms
pipe 3
该主机不在线
PING 192.168.32.4 (192.168.32.4) 56(84) bytes of data.
From 192.168.32.96 icmp_seq=1 Destination Host Unreachable
From 192.168.32.96 icmp_seq=2 Destination Host Unreachable
From 192.168.32.96 icmp_seq=3 Destination Host Unreachable
--- 192.168.32.4 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2003ms
pipe 3
该主机不在线
PING 192.168.32.5 (192.168.32.5) 56(84) bytes of data.
From 192.168.32.96 icmp_seq=1 Destination Host Unreachable
From 192.168.32.96 icmp_seq=2 Destination Host Unreachable
From 192.168.32.96 icmp_seq=3 Destination Host Unreachable
--- 192.168.32.5 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2009ms
pipe 3
该主机不在线
批量添加用户并修改密码
在这里#!/bin/bash
for i in {1..6}
do
echo why${i}|xargs -n1 useradd
echo "123123"|passwd --stdin why${i}
done
[root@qiaozhi ky15]# bash yonghu.sh
更改用户 why1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 why2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 why3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 why4 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 why5 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 why6 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@qiaozhi ky15]# cd /home/
[root@qiaozhi home]# ls
kehuailunnade why1 why2 why3 why4 why5 why6
三.whlie循环语句
- 重复测试某个条件,只要条件成立则反复执行
- 常在不知道范围的时候成立
格式:
while 条件测试操作
do
命令序列
done
例子:猜数字
#!/bin/bash
num=`echo $[RANDOM%1000+1]`
time=0
while true
do
read -p "请输入商品价格(1-1000):" a
let time++
if [ $num -eq $a ]
then
echo "恭喜你猜对了"
echo "$time 次"
exit 1
elif [ $num -lt $a ]
then
echo "您猜的价格高了"
else
echo "您猜的价格低了"
fi
done
[root@localhost why]# bash while.sh
请输入商品价格(1-1000):500
您猜的价格低了
请输入商品价格(1-1000):700
您猜的价格高了
请输入商品价格(1-1000):600
您猜的价格高了
请输入商品价格(1-1000):550
您猜的价格低了
请输入商品价格(1-1000):560
您猜的价格高了
请输入商品价格(1-1000):555
您猜的价格高了
请输入商品价格(1-1000):554
您猜的价格高了
请输入商品价格(1-1000):553
您猜的价格高了
请输入商品价格(1-1000):552
恭喜你猜对了
9 次