一、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 "aa,bb,cc, dd"`
从最后倒数到最短的匹配部分(用%)后面的逗号的地方被删除
echo ${i%,*}
aa,bb,cc
从最后倒数到最长的匹配部分(用%%)后面的逗号的地方都被删除
echo ${i%%, *}
aa
从开头到最短的匹配部分(用#)后面的逗号的地方被删除
echo ${i#*,}
bb,cc,dd
从开头到最长的匹配部分(用##)后面的逗号的地方被删除
echo ${i##*, }
dd
每隔一个数取一个数
{1. .10. .2 }
$ (seq 1 2 10)
截取
echo {变量:截取位置(从0开始):截取个数}
123456789截取4567
i="123456789"
echo ${i:3:4}
4567
统计变量总数
echo ${#i}
二、for循环
for 为 遍历
for循环语句的语法
for 变量名 in 取值列表
do
命令序列
done
示例
计算1~100的和值
通过循环累加的方式计算1~100的和值
vim for1.sh
#!/bin/bash
a=0
for i in {1..100}
do
a=$[$a + $i]
done
echo $a
三、while循环
while 为 迭代
重复测试某个条件,只要条件成立则反复执行
while循环语句的语法
while 条件测试操作
do
命令序列
done
四、until循环
重复测试某个条件,只要条件不成立则反复执行
until循环语句的语法
until 条件测试操作
do
命令序列
done
用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警
#!/bin/bash
CS=3
MM=123456
SUM=0
while true
do
read -p "请输入密码:" PASS
SUM=$((SUM+1))
if [ $PASS == $MM ];then
echo -e "密码正确!"
exit
elif [ $SUM -lt $CS ];then
echo -e "密码错误!"
continue
else
echo "警告:连续3次错误!"
exit
fi
done
五、当脚本文件较长时,可以使用 set 命令指定调试一段脚本。
#!/bin/bash
set -x //开启调试模式
read -p "请输入您的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
echo "$GRADE 分!优秀"
set +x //关闭调试模式
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
echo "$GRADE 分,合格"
else
echo "$GRADE 分?不合格"
fi
作业
1.计算从1到100所有整数的和
2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
3.求从1到100所有整数的偶数和、奇数和
4.执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码
5.检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
6.用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警
7.编写能够自动生成一个8位随机密码的脚本
8.写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
#!/bin/bash
i=1
sum=0
while true
do
echo "来到第$i家店门口"
read -p "请问是否需要进行购物?yes/no " gw
while [ $gw = "yes" ]
do
echo "1.衣服500元"
echo "2.裤子400元"
echo "3.鞋子350元"
echo "4.帽子150元"
echo "5.袜子50元"
echo "放弃购物"
read -p "请问您要购买哪些商品呢亲,请输入号码哦" hm
case $hm in
1)
let ypy+=500
echo "成功消费$ypy元 "
;;
2)
let ypy+=400
echo "成功消费$ypy元 "
;;
#!/bin/bash
i=1
sum=0
while true
do
echo "来到第$i家店门口"
read -p "请问是否需要进行购物?yes/no " gw
while [ $gw = "yes" ]
do
echo "1.衣服500元"
echo "2.裤子400元"
echo "3.鞋子350元"
echo "4.帽子150元"
echo "5.袜子50元"
echo "放弃购物"
read -p "请问您要购买哪些商品呢亲,请输入号码哦" hm
case $hm in
1)
let ypy+=500
echo "成功消费$ypy元 "
;;
2)
do
echo "来到第$i家店门口"
read -p "请问是否需要进行购物?yes/no " gw
while [ $gw = "yes" ]
do
echo "1.衣服500元"
echo "2.裤子400元"
echo "3.鞋子350元"
echo "4.帽子150元"
echo "5.袜子50元"
echo "放弃购物"
read -p "请问您要购买哪些商品呢亲,请输入号码哦" hm
case $hm in
1)
let ypy+=500
echo "成功消费$ypy元 "
;;
2)
let ypy+=400
echo "成功消费$ypy元 "
;;
3)
let ypy+=350
echo "成功消费$ypy元 "
;;
4)
let ypy+=150
echo "成功消费$ypy元 "
;;
5)
let ypy+=50
echo "成功消费$ypy元 "
;;
*)
echo " 放弃 "
break
esac
read -p "请问是继续购物还是结算购物车? yes/no " zc
done
read -p "是否继续购物 yes/no " do
if [ $do = "yes" ]
then
let i++
else
break
fi
done
echo -e "一共经过$i家店. \n合计购物总价:$ypy "