常见的转义字符有:
转义后相当于退格键(backspace),但是前提是“\b”存在字符。“\b”表示删除前一个字符,“\b\b”表示删除前面两个字符
不换行输出,在“\c”后面不存在字符的情况下,作用相当于echo -n,但是当“\b”后面仍然存在字符时,“\c”后面的字符将不会被输出
光标移至行首,但是不换行,相当于使用“\r”之后的字符覆盖“\r”之前同等长度的字符,但是当“\r”后面不存在任何字符时,“\r”前面的字符不会被覆盖;当“\r”后面存在的字符大于前面时,“\r”前面的字符全部会被后面替代
在转义符前面加入转义符,代表将后面的转义符转义为符号本身,也就是 \
删除字符串内容
i=`echo "a,b,c,d"
echo ${i%, *}
a,b,c
//从最后倒数到最短的匹配部分(用%)后面的逗号的地方被删除
echo ${i%%, *}
a
//从最后倒数到最长的匹配部分(用%)后面的逗号的地方都被删除
echo ${i#*,}
b,c,d
//从开头到最短的匹配部分(用#)后面的逗号的地方被删除
echo ${i##*, }
d
//从开头到最长的匹配部分(用##)后面的逗号的地方被删除
for 变量名 in 取值列表
do
命令序列
done
for i in {1..10} {1..10..2}
for i in $(seq 1 10) $(seq 1 2 10)
for ( (i=1; i<=10; i++) ) ( (i=1; i<=10; i+=2) )
do
echo $i
done
for ( (i=1; i<=10; i++)) ;do echo $i ;done
取值列表的多种表示方法
for循环可在同一行表示
for循环中,do done的相同作用的表示方法
3、 实例操作二:批量添加用户
#!/bin/bash
#Batch add users
for i in `cat /root/users.txt`
do
useradd $i &> /dev/null
echo "123456" |passwd --stdin $i &> /dev/null
done
#!/bin/bash
#Check host status based on IP address
for i in `cat /root/ipadds.txt`
do
ping -c 3 -i 0.5 -w 2 $i &> /dev/null
if [ $? -eq 0 ];then
echo "$i is online"
else
echo "$i is offline"
fi
done
while循环可以不断的执行某个程序,直到用户设置的条件完成为止,所以重点是条件,这种不定循环最常见的就是下面这两种格式了。
while循环:while的中文是【当…时】,所以这种方式说的是,当判断式/命令序列的条件成立时,就进行循环,直到命令序列/程序段落的条件不成立才停止。
while [ 条件测试操作 ]
do #do代表循环的开始
判断式/命令序列
done #done代表循环的结束
一:批量添加用户,并设置密码为123456
#!/bin/bash
#Batch add users
a=1
while [ $a -le 20 ]
do
useradd stu$a
echo "123456" | passwd --stdin stu$a &> /dev/null
let a++
done
~
3、实例操作二:猜价格游戏,要求在0-999数字范围内猜价格,并有提示信息,统计最终猜测的次数
#!/bin/bash
#The price guessing game
a=0
b=0
price=$(echo $[RANDOM%1000])
while [ $a -eq 0 ]
do
read -p "请输入你猜的价格:" num
if [ $price -eq $num ];then
let b++
echo "恭喜你猜对了,你一共猜了 $b 次!"
let a++
elif [ $num -lt $price ];then
let b++
echo "猜低了,再接再厉!"
else
let b++
echo "猜高了,再接再厉!"
fi
done
这种方式恰恰和while循环相反,它指的是当判断式/命令序列的条件成立时,就终止循环,否则就会持续循环程序段落。
until [ 条件测试操作 ]
do
判断式/命令序列
done
计算1-50的和
#!/bin/bash
#Calculate the sum from 1 to 50
a=1
b=0
until [ $a -gt 50 ]
do
b=$(($b+$a))
let a++
done
echo "得出的和为:$b"
3、实例操作二:为指定用户发送在线消息
(1)若用户不在线(未登陆系统),则每3秒试一次,直至用户登录系统后在发送信息
(2)用户名与消息通过位置参数传递给脚本
#!/bin/bash
#Send an online message for a specified user
username=$1
if [ $# -lt 1 ];then
echo "Usage:`basename $0` []"
exit 1
fi
#判断用户是否存在。如果存在则不进行任何操作
if grep "^$username:" /etc/passwd > /dev/null;then :
else
echo "$username is not a user on this system"
exit 2
fi
#判断用户是否在线,若不在线则每3秒联系一次
until who|grep "$username" > /dev/null;do
echo "$username is not logged on"
sleep 3
done
#shift去除第一个参数,$*为所有参数的值
shift;msg=$*
#判断$msg是否为空,为空则赋值
[[ "X"$msg == "X" ]] && msg="Are you ready? $username"
#通过write命令给用户发送消息
echo "$msg"| write $username
1、echo 的用法
echo -n 表示不换行输出
echo -e 输出转义字符,将转义后的内容显示在屏幕上(\b \c \n \f \t \r \)
2、for 循环(遍历)
3、while循环(迭代)
4、unitl循环——与while循环相反