目录
一.echo命令:
echo -n 表示不换行输出
echo -e 表示输出转义符
常用的转义符
选项 | 作用 |
---|---|
\r | 光标移至行首,并且不换行 |
\s | 当前shell的名称,如bash |
\t | 插入Tab键,制表符 |
\n | 输出换行 |
\f | 换行,但光标仍停留在原处 |
\ | 表示插入"\"本身转义 |
\b | 表示退格 不显示前一个字符 |
\c | 抑制更多的输出或不换行 |
echo 写脚本的时候 对齐 不换行
[root@localhost ky15]#echo -e "12345\b678"
##退格删除前面的字符
1234678
[root@localhost ky15]#echo -e "12345\b\b678"
123678
[root@localhost ky15]#echo -e "12345\b\b\b678"
12678
[root@localhost ky15]#echo -e "12345\b\b\b\b678"
16785
###注意退格键和末尾的字符相关,超过末尾的字符数量 会出bug 了解即可
[root@localhost ky15]#echo -e "12345678\c"
12345678[root@localhost ky15]#echo -e "1234\c5678"
1234[root@localhost ky15]#
###\c 注意 使用在数字中间会把后面内容删除
echo -e "n\n\n\n\n\nw"|fdisk /dev/sdb
#自动硬盘分区
#!/bin/bash
read -p "请输入你要分区的设备:" disk
read -p "请输入你要分区的大小:" num
echo -e "n\n\n\n\n${num}\nw\n " | fdisk ${disk}
二.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
三.seq:
[root@localhost data]#seq 1 2 10
#从1 开始 步长为2 到10 为止
1
3
5
7
9
四.循环:
1.循环的意义:
将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件
重复运行次数
-
循环次数事先已知
-
循环次数事先未知
常见的循环的命令:for, while, until
2.for循环:
语法结构
-
列表循环
-
不带列表循环
-
类C风格的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
#########示例##########
[root@localhost ~]# vim users.txt
zhangsan
wangwu
my
qyd
lisi
[root@localhost ~]# vim useradd.sh
#!/bin/bash
#批量添加用户
for USER in $(cat /root/users.txt) #也可以使用for USER in `cat /root/users.txt)`
do
useradd $USER
echo "123123" | passwd --stdin $USER
done
[root@localhost ~]# bash useradd.sh
示例2
- 生成八位数的随机密码,取值范围为大小写英文字母和数字
截取字符串${i;n;m}
i是变量名
n是开始取值的下标,从0开始算起
m是取值长度
随机数RANDOM
$RANDOM 随机取数,范围为0--32767之间的整数
$RANDOM % i 取出来的数的范围为 0--(i-1)
字符串的追加方法
- 变量1+=变量2
- 变量1=变量1变量2
字符串长度
${ #变量名}
[root@localhost ~]# vim passwd.sh
#!/bin/bash
#生成8位数密码
##定义密码的取值范围
String="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
##循环8次
for ((i=1;i<=8;i++))
do
##每次循环随机获取0到字符串长度-1的下标值
num=$[ RANDOM % ${#String} ]
##进行字符串的截取,每次截取1个
var=${String:num:1}
##每次追加生成的密码
passwd+=$var
done
echo "本次生成的密码为:$passwd"
[root@localhost for]# bash passwd.sh
本次生成的密码为:zT0pH1Eb
[root@localhost for]# bash passwd.sh
本次生成的密码为:h2algqgp
3. while循环:
重复测试某个条件,只要条件成立则反复执行
格式:
while 条件测试操作
do
命令序列
done
- 批量添加用户
##################示例##########################
[root@localhost demo]# vim 4.sh
#!/bin/ bash
#用户名称以stu开头,按数宁顺序进行编号
#一共添加20个用户,stu1、 stu2 、......、 stu20
#初始密码均设为123456
a=1
while [ $a -le 20 ]
do
useradd stu$a -M
echo "123123" | passwd --stdin stu$a
let a++
done
[root@localhost demo]# bash 4.sh
while 读取文件内容:
格式
while read 变量名
do
done < 文件名
或者
cat 文件名 | while read 变量名
do
done
示例 :
将name.txt文件内的内容分别打印出来
[root@localhost demo]# vim 7.sh
#!/bin/bash
while read name
do
echo $name
done < name.txt
[root@localhost demo]# bash 7.sh
zhangsan
wang uw
lisi
zhaoliu
4.until循环:
until 循环与 while 循环类似,while 循环能实现的脚本 until 同样也可以实现,但区别是while 循环在条件为真是继续执行循环,而 until 则是在条件为假时执行循环
until 循环语句的语法结构
```http
until 条件测试操作
do
命令序列
done
```
示例:
计算1-50的和
[root@localhost demo]# vim 2.sh
#!/bin/bash
a=0
sum=0
until [ $a -gt 50 ]
do
sum=$[ sum + a ]
let a++
done
echo "1-50的和为$sum"
[root@localhost demo]# bash 2.sh
1-50的和为1275