一 echo命令
echo -n 表示不换行输出
echo -e 表示输出转义符
常用的转义符

二 date
date查看当前系统时间
-d 你描述的日期,显示指定字符串所描述的时间,而非当前时间
%F 完整日期格式,等价于 %Y-%m-%d
% T 时间(24小时制)(hh:mm:ss)
root@localhost \~\]# date -d '-1 day' +%F 2021-10-21 \[root@localhost \~\]# date +%F 2021-08-19 \[root@localhost \~\]# date -d '1 day ' +%F-%T 2021-08-20-23:28:42 \[root@localhost mnt\]# date -d "-3 day" 前三天 2021年 08月 18日 星期三 11:30:15 CST \[root@localhost mnt\]# date -d "+3 day" 后三天 2021年 08月 18日 星期三 11:30:15 CST \[root@localhost data\]#date -d '1 day ' +%F' '%T 2021-10-22 00:45:37  ### 三 日历 \[root@localhost data\]#cal 2021 #查看日历 \[root@localhost data\]#cal 9 1752  ### 四 $RANDOM 取值范围:0-32767 \[root@test1 \~\]# echo $\[$RANDOM%50
37
root@test1 \~\]# echo $\[$RANDOM%20
15
五 seq
root@localhost data\]#seq 1 2 10 #从1 开始 步长为2 到10 为止 1 3 5 7 9 \[root@localhost data\]#seq 9 -1 1 9 8 7 6 5 4 3 2 1 ### 六 循环的命令:for, while, until #### 1 for 列表循环 for 变量名 in {list} do command done #### 2 不带列表循环 for 变量名 do command done #### 3 while 相对于for,需要知道循环次数 我们只知道停止条件,不知道次数,就需要使用while,直到达到条件 while循环 :1、语法结构 2、死循环 while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环 实验:1元才是正确答案 [root@localhost ~]#cat mcb.sh #!/bin/bash p=`echo $[ RANDDM%1000+1 ]` time=0 while true do let time++ read -p "请输入你猜测的价格 (1-1000):" h if [ $h -eq $p ] then echo "恭喜你猜中了,你一共猜测了$time次" exit elif [ $h -gt $p ] then echo "你猜测的价格过高" else echo "你猜测的价格过低" fi done  #### 4 双重循环及跳出循环 * break跳出单个循环 break n 数字数字是几代表跳出n层循环 * continue终止某次循环中的命令,但是不会完全终止命令 * exit 直接退出脚本 #### 5 until until 循环与 while 循环类似,while 循环能实现的脚本 until 同样也可以实现,但区别是while 循环在条件为真是继续执行循环,而 until 则是在条件为假时执行循环 until 循环语句的语法结构如下所示 until 条件测试操作 do 命令序列 done ### 七 for-实验:①九九乘法表 #!/bin/bash # j行数 i管列数 for j in {1..9} do for i in `seq $j` do echo -e "${i}x${j}=$[i*j] \c" done echo done   另一种 #!/bin/bash for j in {1..9} do for i in `seq $j` do echo -ne "$j*$i=$[ $j*$i ]\t" done echo done  #### 实验②测试ping 通 #!/bin/bash for i in {1..254} do { ping -c2 -W2 192.168.11.$i &>/dev/null && echo "$i is online" >> data/hostonline.txt || echo "$i is offline" >> data/hostoffline.txt } & done 另一个 [root@localhost ~]# cat mcb8.sh #!/bin/bash read -p "请输入你需要测试的网段,格式为(192.168.11.):" ip for i in {1..254} do { ping -c2 -W2 $ip$i &>/dev/null if [ $? -eq 0 ] then echo "$ip$i is online" echo $ip$i >> host.txt else echo "$ip$i is offline" fi }& done wait   #### 实验③ 改变颜色 \[root@localhost data\]# echo -e "\\E\[1;$\[RANDOM%7+31\]m 称霸武林 \\E\[0" #### 实验④ 求和 #!/bin/bash sum=0 for i in {1..100} do sum=$[sum+i] done echo $sum  另一种方法 #!/bin/bash #by even 2018 sum=0 for i in `seq 1 100` do sum=$[$i+$sum] done echo $sum  另一种 #!/bin/bash # i=100 a=1 until [ $i -le 1 ];do #循环条件 i<=1 a=$(( $a + $i )) i=$(( $i - 1 )) done echo $a  #### 实验⑤改名字 [root@localhost data]# cd / [root@localhost /]# mkdir data [root@localhost /]# bash mcb13.sh bash: mcb13.sh: 没有那个文件或目录 [root@localhost /]# cd [root@localhost ~]# cd data/ [root@localhost data]# mv mcb13.sh /data [root@localhost data]# cd /data/ [root@localhost data]# ls mcb13.sh [root@localhost data]# [root@localhost data]# ls mcb13.sh *************************** [root@localhost ~]# cd data/ [root@localhost data]# mv mcb13.sh /data [root@localhost data]# cd /data/ [root@localhost data]# ls mcb13.sh ********************************** [root@localhost data]# cat mcb13.sh #!/bin/bash for i in `cat /data/name.txt` do id $i if [ $? -eq 0 ];then echo "用户已存在" else useradd $i[root@localhost data]# cat name.txt 马传斌 马传斌2 马传斌3 ABCD EFGihf ************************** echo 123 | passwd --stdin $i fi done *********************** [root@localhost data]# bash mcb13.sh id: 马传斌: no such user useradd:无效的用户名"马传斌" passwd:未知的用户名 马传斌。 id: 马传斌2: no such user useradd:无效的用户名"马传斌2" passwd:未知的用户名 马传斌2。 id: 马传斌3: no such user useradd:无效的用户名"马传斌3" passwd:未知的用户名 马传斌3。 id: ABCD: no such user 更改用户 ABCD 的密码 。 passwd:所有的身份验证令牌已经成功更新。 id: EFGihf: no such user 更改用户 EFGihf 的密码 。 passwd:所有的身份验证令牌已经成功更新。