目录
echo [选项] ... 将指定内容(字符、变量、命令等)标准输出到屏幕
-n 不换行输出(默认是换行输出)
-e 输出转义字符,将转义后的内容输出
-e 支持输出内容常用转义字符
| 转义字符 | 作用 |
| \b | 转义后相当于退格键(删除前一个字符,可使用多次) |
| \c | 不换行输出,在“\c”后面不存在字符的情况下,相当于echo -n 在“\c”后面存在字符的情况下,后面的字符不会被输出 |
| \n | 换行,被输出的字符从“\n”处开始另起一行输出 |
| \f | 换行,“\f”后换行输出的字符,开头从上一行结尾开始 |
| \v | 与“\f”相同 |
| \t | 转义后相当于插入tab制表符 |
| \r | 光标移至行首(不换行)将\r后的字符从头输出,覆盖原有长度的内容 |
| \\ | 输出特殊字符本身,如\\ 输出\ 本身,\$ 输出 $本身 |
- [root@localhost1 ~]#echo "abcd" && echo "abcd"
- abcd
- abcd
- [root@localhost1 ~]#echo -n "abcd" && echo "abcd"
- abcdabcd
-
- [root@localhost1 ~]#echo -e "abcd\befg"
- abcefg
-
- [root@localhost1 ~]#echo -e "abcd\cefg"
- abcd
-
- [root@localhost1 ~]#echo -e "abcd\nefg"
- abcd
- efg
-
- [root@localhost1 ~]#echo -e "abcd\fefg"
- abcd
- efg
-
- [root@localhost1 ~]#echo -e "abcd\vefg"
- abcd
- efg
-
- [root@localhost1 ~]#echo -e "abcd\tefg"
- abcd efg
-
- [root@localhost1 ~]#echo -e "abcd\refg"
- efgd
-
- [root@localhost1 ~]#echo -e "\\ \$"
- \ $
${变量名:索引:长度}
注:索引是指一个字符串中,字符排序的编号,索引编号以0开头(第一个字符编号为0)
- //定义变量string
- [root@localhost1 ~]#string=nicetomeetyou
-
- //截取
- [root@localhost1 ~]#echo ${string:6:4}
- meet
- [root@localhost1 ~]#echo ${string:0:4}
- nice
${#变量名}
- [root@localhost1 ~]#string=nicetomeetyou
-
- [root@localhost1 ~]#echo ${#string}
- 13
变量+=字符串或变量 //将原有的变量值后追加指定的字符串或变量值
- [root@localhost1 data]#vim string.sh
- #!/bin/bash
-
- string1=abcdefg
- string1+=hijk -- 追加字符串
- echo $string1
-
- string2="nice to meet "
- yourname=jack
- string2+=$yourname -- 追加变量的值
- echo $string2
-
- [root@localhost1 data]#bash string.sh
- abcdefghijk
- nice to meet jack
echo ${变量名%指定格式内容}
echo ${变量名%%指定格式内容}
echo ${变量名#指定格式内容}
echo ${变量名##指定格式内容}
| % | 从末尾往前匹配最短符合指定格式的内容并删除 |
| %% | 从末尾往前匹配最长符合指定格式的内容并删除 |
| # | 从开头往后匹配最短符合指定格式的内容并删除 |
| ## | 从开头往后匹配最长符合指定格式的内容并删除 |
| 指定格式内容 | 字符串中符合某个内容特征的格式(如:*是以:开头后面有若干字符) |
最短符合可理解为只有一段满足指定格式的内容;最长符合可理解为所有满足指定格式的内容。
- //定义一个变量i
- [root@localhost1 ~]#i="11,22,33,44"
- [root@localhost1 ~]#echo $i
- 11,22,33,44
-
- //对$i中从结尾开始最短满足,*格式的内容进行删除
- [root@localhost1 ~]#echo ${i%,*}
- 11,22,33
-
- //对$i中从结尾开始最长满足,*格式的内容进行删除
- [root@localhost1 ~]#echo ${i%%,*}
- 11
-
- //对$i中从开头开始最短满足*,格式的内容进行删除
- [root@localhost1 ~]#echo ${i#*,}
- 22,33,44
-
- //对$i中从开头开始最长满足*,格式的内容进行删除
- [root@localhost1 ~]#echo ${i##*,}
- 44
-
- //对$i中从结尾开始最短满足*,*,格式的内容进行删除
- [root@localhost1 ~]#echo ${i#*,*,}
- 33,44
$ RANDOM //RANDOM变量可以生成随机数(默认范围 0 ~ 32767)
- [root@localhost1 ~]#echo $RANDOM
- 6584
- [root@localhost1 ~]#echo $RANDOM
- 14161
$[ RANDOM % n ] //n代表指定数字,使用取余操作可实现指定随机数范围( 0 ~ n-1)
- //取 0~9 的随机数
- [root@localhost1 ~]#echo $[RANDOM % 10]
- 0
- [root@localhost1 ~]#echo $[RANDOM % 10]
- 4
- [root@localhost1 ~]#echo $[RANDOM % 10]
- 6
- [root@localhost1 ~]#echo $[RANDOM % 10]
- 8
$[ RANDOM % n + x ] //x为指定数字,n 后加上 x ,代表的随机数范围是( x ~ n-1+x)
- //取 1~100 范围的随机数
- [root@localhost1 ~]#echo $[RANDOM % 100 + 1]
- 38
- [root@localhost1 ~]#echo $[RANDOM % 100 + 1]
- 49
- [root@localhost1 ~]#echo $[RANDOM % 100 + 1]
- 76
- [root@localhost1 ~]#echo $[RANDOM % 100 + 1]
- 12
首先创建文件用于下面的脚本取值,这里每个取值使用换行符分割,实际上每个取值默认可以通过空格、制表符、换行符
- //创建文件用于脚本取值
- [root@localhost1 ifstest]#vim value.txt
- zhangsan
- lisi
- wangwu
- zhaoliu
- qianqi
- zhuba
for 变量名 in $(cat 文件位置)
do
命令序列
done
- //for 循环从文件取值
- [root@localhost1 ifstest]#vim CatchFileValue.sh
- #!/bin/bash
- for i in $(cat /ifstest/value.txt)
- do
- echo $i
- done
-
- [root@localhost1 ifstest]#bash CatchFileValue.sh
- zhangsan
- lisi
- wangwu
- zhaoliu
- qianqi
- zhuba
while read 变量名
do
命令序列
done < file
- [root@localhost1 ifstest]#vim CatchFileValue.sh
- #!/bin/bash
- while read i
- do
- echo $i
- done < /ifstest/value.txt
-
- [root@localhost1 ifstest]#bash CatchFileValue.sh
- zhangsan
- lisi
- wangwu
- zhaoliu
- qianqi
- zhuba
cat 文件位置 | while read 变量名
do
命令序列
done
- [root@localhost1 ifstest]#vim CatchFileValue.sh
- #!/bin/bash
- cat /ifstest/value.txt | while read i
- do
- echo $i
- done
-
- [root@localhost1 ifstest]#bash CatchFileValue.sh
- zhangsan
- lisi
- wangwu
- zhaoliu
- qianqi
- zhuba
[root@localhost ~]# set | grep IFS //使用此命令可以查看IFS指定的字段分隔符
-- IFS变量指定的字段分隔符默认为 (空格)、\t(tab制表符)、\n(enter换行符)
- [root@localhost1 ~]#set | grep IFS
- IFS=$' \t\n'
- local i IFS='
- local i IFS=" "'
- local i IFS=" "'
- local i IFS='
- local i IFS='
- local c i=0 IFS='
- local IFS='
- local IFS='
- local option option2 i IFS='
- IFS='
- local IFS='
- local IFS='
- local IFS='
- local IFS='
- local IFS='
- local IFS='
- local i IFS='
- local IFS='
- local i c='' IFS='
- local OIFS=$IFS IFS='
- IFS=$OIFS;
- local IFS='
- local IFS='
- local IFS='
- local IFS='
- //直接修改IFS变量的值,可以实现永久修改字段分隔符
- [root@localhost1 ~]#IFS=$'/n'
- [root@localhost1 ~]#set | grep IFS
- IFS=/n -- 这里显示已经被修改成/n(换行符)
- local i IFS='
- local i IFS=" "'
- local i IFS=" "'
- local i IFS='
- ...
- //指定文件用于循环语句取值
- [root@localhost2 ~]#vim value.txt
- zhang san
- li si
- wang wu
- zhao liu
- qian qi
- zhu ba
-
- //默认情况的$IFS会指定空格、制表符、换行符为字段分割符
- [root@localhost2 ~]#vim CatchFileValue.sh
- #!/bin/bash
- for i in `cat /root/value.txt`
- do
- echo $i
- done
-
- //文件中的值输出效果如下
- [root@localhost2 ~]#bash CatchFileValue.sh
- zhang san
- li si
- wang wu
- zhao liu
- qian qi
- zhu ba
- zhang
- san
- li
- si
- wang
- wu
- zhao
- liu
- qian
- qi
- zhu
- ba
在一个脚本中,如果某段命令行程序需要使用特定的字段分隔符,可使用如下操作
IFSb=$IFS -- 自定义一个变量,将$IFS的变量值赋给此变量
IFS='\n' -- 修改$IFS指定的字段分隔符
命令序列 -- 修改后的命令序列将会使用修改后的$IFS指定的字段分隔符
IFS=$IFSb -- 将自定义的变量再赋值给$IFS,即恢复原本的$IFS
命令序列 -- 之后的命令将不会受到之前修改的$IFS的影响
- [root@localhost2 ~]#vim CatchFileValue.sh
- #!/bin/bash
- IFSb=$IFS
- IFS=$'\n' -- 将字段分割符改为\n(换行符)
- for i in `cat /root/value.txt`
- do
- echo $i
- done
- echo "------------"
- IFS=$IFSb -- 将原本的$IFS变量值恢复
- for j in `cat /root/value.txt`
- do
- echo $j
- done
-
-
- [root@localhost2 ~]#bash CatchFileValue.sh
- zhang san -- 实现只取换行符分割的字段
- li si
- wang wu
- zhao liu
- qian qi
- zhu ba
- ------------
- zhang --恢复后不受之前修改的影响,与原本输出效果相同
- san
- li
- si
- wang
- wu
- zhao
- liu
- qian
- qi
- zhu
- ba