shell 循环语句for 和echo命令的补充
文章目录
- shell 循环语句for 和echo命令的补充
- echo命令补充
- echo中{}的用法
- 循环语句(for )
- for语句的结构
- 例子
- 例一
- 例二
- 例三
- 例四
- 例五
echo命令补充
echo -n #表示不换行输出
echo -e #输出转义字符,将转义之后的内容输出到屏幕上
常用的转义字符(必须跟上-e选项且需要加上“”)
\b #转移之后相当于退格键(backspace),前提是“\b”后边存在字符;
#“\b”表示删除前一个字符“\b\b”表示删除两个字符
\c #不换行输出
\n #换行,被输出的字符从“\n”处开始另起一行,也可当作回车操作
\f #换行,但是换行后的新航的开头位置衔接着上一行的行尾
\v #与\f相同
\t #转以后表示插入tab,即横向制表符
\r ##光标移至行首,但是不换行,相当于使用\r以后的字符覆盖\r之前的字符;
##但是当\r后不存在任何字符时,\r之前的字符不会被覆盖;可模拟回车功能
\\ #表示插入“\”本身
echo中{}的用法
从尾部匹配字符到第一个字符位置
i=`echo "11,22,33,44"`
echo ${i%,*}
11,22,33
#从最后倒数到最短的匹配部分(用%)后面的逗号的地方被删除
#即匹配到44之前的",",然后将44删除
#即输出变量值内容,除了最后一个字段
从尾部匹配字符到第最后一个字符位置
i=`echo "11,22,33,44"`
echo ${i%%,*}
11
#从最后倒数到最长的匹配部分(用%%)后面的逗号的地方被删除
#即匹配到11后的逗号,11后都删除
#即输出变量值内容的第一个字段
从头部匹配字符到第一个字符位置
i=`echo "11,22,33,44"`
echo ${i#*,}
22,33,44
#从最后倒数到最长的匹配部分(用#)后面的逗号的地方被删除
#即匹配到11后的逗号,","前都删除
#即输出变量值的内容,除了第一个字段
从头部匹配字符到最后一个字符位置
i=`echo "11,22,33,44"`
echo ${i##*,}
44
#从开头到最长的匹配部分(用##)后面的逗号的地方被删除
#即匹配到11后的逗号,44前都删除
#即输出变量值的内容的最后一个字段
echo ${b: -abc}
#调用默认值
echo ${b: =abc}
#调用默认值并赋值
循环语句(for )
for语句的结构
读取不同的变量值,来诸葛执行同一组命令
for 变量名 in 取值列表
do
命令序列
done
#遍历取值列表里的值全都执行一遍
例:
for 收件人 in 邮件地址列表
do
发送邮件
done
取值列表的表达方式(范围)
{1..6} ##用{}表示
123456 ##直接打出要进行循环的数
$(seq 1 6) ##用seq止步于哪一位
例子
例一
计算出1~100所有整数的和,并分出其中所有奇数和和偶数和
#!/bin/bash
for i in {1..100}
do
sum=$[$sum+$i]
if [ $[ $i % 2 ] -eq 1 ]
then
sum1=$[$sum1 + $i]
else
sum2=$[$sum2 +$i]
fi
done
echo " 1~100所有数的和为:$sum"
echo " 1~100所有数的奇数和为:$sum1"
echo " 1~100所有数的偶数和为:$sum2"
例二
检测指定范围主机是否通信,并将能够通信的主机ip输出到host_ip文件中
#!/bin/bash
for ip in 172.16.100.{1..254}
do
{
if [ $ip = "172.16.100.1" ]
then
ping-c 3 -i 0.5 -w 2 $ip &> /dev/null
if [ $? -eq 0 ]
then
echo "$ip is online" > /opt/host_ip
fi
else
ping -c 3 -i 0.5 -w 2 $ip &> /dev/null
if [ $? -eq 0 ]
then
echo "$ip is online" >> /opt/host_ip
fi
fi
}&
done
wait
echo "在线的主机如下:`cat /opt/host_ip`"
例三
用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警
#!/bin/bash
for i in {1..3}
do
read -p "请输入密码" num
if [ $num = 123456 ]
then
echo "密码正确"
exit
else
echo "请重新输入"
fi
done
echo "结束"
例四
编写能够自动生成一个8位随机密码的脚本
#i/bin/bash
str="qwertyuiopasdfghjklzxcvbnm123456789QAZWSXEDCRFVTGBYHNUJMIKOLP"
for i in {1..8}
do
num=$[$RANDOM % ${#str}]
tmp=${str:num:1}
password+=$tmp
done
echo "随机密码:$password"
例五
将一个0到255之间的十进制数转换成二进制数
#!/bin/bash
read -p "输入一个数(0~255)" num
if [ $num -ge 0 ] && [ $num -le 255 ]
then
for ((i=1; i<=8; i++))
#由于十进制数在0到255之间所以,二进制最多为8位,循环八次
do
num1="$[ $num %2 ] $num1"
#将$num取余数并赋予$num1, 后面跟一个$num1表示$num1之前的反向输出
num=$[ $num /2 ]
#$num按循环次数除2取商
done
echo "$1 转二进制为: $num1"
else
echo "错误重新输入"
fi