echo选项用法
echo -n表示不换行输出
echo -e 输出转义字符,将转义后的内容输出到屏幕上
常用的转义字符:
\b转义后相当于按退格键(backspace),但前提是\b"后面存在字符;"\b"表示删除前一个字符,"\b\b"表示删除前两个字符。
\c不换行输出,在"\c"后面不存在字符的情况下,作用相当于echo -n;
但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出。
\n换行,被输出的字符从"\n"处开始另起一行。
\f换行,但是换行后的新行的开头位置连接着上一行的行尾;
\v与 \f相同;
\t转以后表示插入tab,即横向制表符;
\r
光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符;但是当"\r"后面不存在任何字符时
"\r"前面的字符不会被覆盖
\\表示插入"\"本身;
i=`echo "11,22,33,44"`
echo ${i%,*}
从最后倒数到最短的匹配部分% 后面的逗号的地方被删除(包含逗号)
11,22,33
echo ${i%%,*}
从最后倒数到最长的匹配部分用%%后面的逗号地方都被删除
11
echo ${i#*,}
22,33,44
从开头到最短的匹配部分用#后面的逗号地方被删除
echo ${i##*,}
44
从开头到最长的匹配部分用##后面的逗号的地方被删除
for语句结构
读取不同的变量值,用来逐个执行同一组命令
使用for 把123456 打印输出到屏幕上
还有一种方法,也可以把1-10打印到屏幕上
用seq也可以
用c语言的格式也可以
把 1- 100 的数字 哪些是偶数 哪些是基数,分别两列进行输出
代码如下
把1-100所有奇数合,偶数合,相加
批量添加用户
用户名存放在users.txt文件中,每行一个
如果用户存在,则输出已存在;如果用户不存在,则创建
初始密码均为设为123456
验证脚本
命令思路:1.先 定义 users 变量
2.进行for循环,取值范围在 /root/users.txt
3.输出 users 变量,在 name 变量中检索
4.进if语句判断
5.如果$? = 0 ,那么进行下一步判断;输出 name 已经存 在
6.如果$? = 1 ,那么 创建这个用户
7.并进行 密码输出 ,并将输出结果 输出到黑洞当中
例2:在 “qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM123456789” 中选取任意8位密码,且每次得到的结果都不一样
while语句结构
重复测试某个条件,只要条件成立则反复执行
列1: 批量添加用户
用户名称以stu开头,按数字顺序进行编号
一共添加20个用户
初始密码设为123456
例2:猜商品价格游戏
通过变量 RANDOM 获得随机数
提示用户猜测并记录次数,猜中后退出循环
until语句结构
重复测试某个条件,只要条件不成立则反复执行
例1:计算1-50的和
例2: 为指定用发送在线消息
若用户不在线(未登陆系统),则每10分钟试一次,直到用户登陆系统后再发送信息
用户名与消息通过位置参数传递给脚本
#!/bin/bash
#example: ./write.sh <USERNAME> [message]
username=$1
msg=$2
#用于判断执行脚本的格式是否携带了位置参数
if [ $# -lt 1 ];then
echo "USAGE: $0 <USERNAME> [message]"
#!/bin/bash
#example: ./write.sh <USERNAME> [message]
username=$1
msg=$2
#用于判断执行脚本的格式是否携带了位置参数
if [ $# -lt 1 ];then
echo "USAGE: $0 <USERNAME> [message]"
exit 1
fi
#用于判断携带的用户名参数是否正确
grep "^${username}:" /etc/passwd > /dev/null
if [ $? -ne 0 ];then
echo "$username 不是系统用户"
exit
fi
#用户判断系统用户是否已登陆
who | grep "$username" > /dev/null
while [ $? -ne 0 ]
do
echo "$username 没有登陆系统,请先登陆"
sleep 3
done
if [ ! -z "$msg"];then
echo "执行命令:echo $msg | write $username"
else
msg="hello $username,this is default message"
echo "执行命令: echo $msg | write $username"
fi