第8章:从shell眼中看世界/8.0 echo:单词分割机制
- echo:单词分割机制
- 格式:echo 结果集,这里的结果集可能是
- 某个字符串:abc
- 多个字符串:abc edf
- 命令结果: ls cal
- 分割原则:按结果集中的空格、制表符、换行符进行分割
第8章:从shell眼中看世界/8.1 echo:字符展开/8.1.1 空格隔开字符串展开
- 空格隔开字符串
- 展开原则:按空格展开,结果用单个空格隔开,不管中间有多少个空格
- 举例:中间多个空格
[root@zabbix ~]# echo acd edf xwt
acd edf xwt
第8章:从shell眼中看世界/8.1 echo:字符展开/8.1.2 *展开
- *展开
- 展开原则: 按当前目录所有文件名展开
- 举例:
[root@zabbix ~]# echo *
err-output.txt ln_123 ls-output.txt ls.txt me mycat mycat2.txt mylog mysql.tar.gz q s_ln_123 s_ln_dir test.txt wys_bak
第8章:从shell眼中看世界/8.2 echo:路径名展开/8.2.1 全文件名通配
- 文件名模糊匹配
- 展开原则:按某个匹配规则展开
- 举例:
[root@zabbix ~]# echo m*
me mycat mycat2.txt mylog mysql.tar.gz
第8章:从shell眼中看世界/8.2 echo:路径名展开/8.2.2 部分路径通配
- 部分路径通配
- 展开原则:按路径中*号的地方进行展开路径名
- 举例:
[root@zabbix ~]# echo /usr/*/bin
/usr/local/bin
第8章:从shell眼中看世界/8.2 echo:路径名展开/8.2.3 [[:class:]]形式匹配
- [[:class:]]形式匹配
- 展开原则:按[[:class:]]指定的通配符展开
- 举例:
[root@zabbix ~]# echo [[:lower:]]* 首字母小写展开
err-output.txt ln_123 ls-output.txt ls.txt me mycat mycat2.txt mylog mysql.tar.gz q s_ln_123 s_ln_dir test.txt wys_bak
第8章:从shell眼中看世界/8.2 echo:路径名展开/8.2.4 隐藏文件展开
- 隐藏文件展开
- 展开规则:隐藏文件名的首字母是.,所以按首字母的.展开
- 举例:
[root@zabbix ~]# echo .*
. .. .bash_history .bash_logout .bash_profile .bashrc .cache .config .cshrc .docker .java .lesshst .m2 .node-gyp .npm .oracle_jre_usage .pki .rnd .ssh .tcshrc .viminfo
第8章:从shell眼中看世界/8.3 echo:波浪线展开
- echo:波浪线展开
- 展开原则:展开当前用户的根目录或者指定用户的根目录
- 举例:
[root@zabbix ~]# echo ~
/root
[root@zabbix ~]# echo ~root
/root
第8章:从shell眼中看世界/8.4 echo:算术表达式展开
- 算术表达式展开
- 展开原则:按格式$((表达式))计算结果展开
- 注意:只支持整数进行算术运算
- 举例:
- 加法
[root@zabbix ~]# echo $((2+2))
4
- 减法
[root@zabbix ~]# echo $((2-2))
0
- 乘法
[root@zabbix ~]# echo $((2*2))
4
- 除法
[root@zabbix ~]# echo $((3/2))
1
- 取余
[root@zabbix ~]# echo $((3%2))
1
- 取幂
[root@zabbix ~]# echo $((4**2))
16
- 加法
第8章:从shell眼中看世界/8.5 echo:花括号展开/8.5.1 集合元素展开
- 集合元素展开
- 展开原则:按{元素1,元素2,元素n}元素展开,元素之间用,隔开
- 举例:
- 单个花括号
[root@zabbix ~]# echo front-{A,B}-back
front-A-back front-B-back
- 嵌套花括号
[root@zabbix ~]# echo front-{A{1,2},{3,4},B}-back
front-A1-back front-A2-back front-3-back front-4-back front-B-back
- 单个花括号
第8章:从shell眼中看世界/8.5 echo:花括号展开/8.5.2 连续元素展开
- 连续元素展开
- 展开原则:按{开始序号..结束序号}规则展开
- 举例:
- 连续数字:
[root@zabbix ~]# echo mem_{1..5}
mem_1 mem_2 mem_3 mem_4 mem_5
- 连续字母:
[root@zabbix ~]# echo mem_{a..z}
mem_a mem_b mem_c mem_d mem_e mem_f mem_g mem_h mem_i mem_j mem_k mem_l mem_m mem_n mem_o mem_p mem_q mem_r mem_s mem_t mem_u mem_v mem_w mem_x mem_y mem_z
- 连续数字:
第8章:从shell眼中看世界/8.5 echo:花括号展开/8.5.3 创建连续文件夹举例
- 创建连续文件夹举例
-
[root@zabbix wys]# mkdir {2017..2019}-0{1..9} {2017..2019}-{10..12}
[root@zabbix wys]# ls
2017-01 2017-03 2017-05 2017-07 2017-09 2017-11 2018-01 2018-03 2018-05 2018-07 2018-09 2018-11 2019-01 2019-03 2019-05 2019-07 2019-09 2019-11
2017-02 2017-04 2017-06 2017-08 2017-10 2017-12 2018-02 2018-04 2018-06 2018-08 2018-10 2018-12 2019-02 2019-04 2019-06 2019-08 2019-10 2019-12
[root@zabbix wys]#
第8章:从shell眼中看世界/8.6 echo:变量名展开
- echo:参数展开
- 展开原则:按 $变量名 格式展开
- 举例:
[root@zabbix ~]# echo $USER
root
第8章:从shell眼中看世界/8.7 echo:命令展开
- echo:命令替换
- 展开原则:按 $(命令)展开
- 举例:
-
[root@zabbix ~]# echo $(ls)
err-output.txt ln_123 ls-output.txt ls.txt me mycat mycat2.txt mylog mysql.tar.gz q s_ln_123 s_ln_dir test.txt wys wys_bak
-
[root@zabbix ~]# file $(ls /usr/bin/* | grep zipnote)
/usr/bin/zipnote: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=750c11ada0bec740fa2885383e678e7be5206cdd, stripped
-
第8章:从shell眼中看世界/8.8 echo:引号展开/8.8.1 双引号禁用部分展开
- echo:双引号引用开展
- 展开原则:在双引号内的内容,除了以下情况依然会展开外,其它的信息都按原输入内容显示,不进行分割( 第8章:从shell眼中看世界/8.0 echo:单词分割机制),仍然会展开的情形如下:
- 第8章:从shell眼中看世界/8.4 echo:算术表达式展开
- 第8章:从shell眼中看世界/8.6 echo:变量名展开
- 第8章:从shell眼中看世界/8.7 echo:命令展开
- 举例:
- 不展开
[root@zabbix ~]# echo "test a b * ~"
test a b * ~
- 按算术展开
[root@zabbix ~]# echo "* ~ $((2+2))"
* ~ 4
- 按变量名展开
[root@zabbix ~]# echo "* ~ $USER"
* ~ root
- 按命令展开
[root@zabbix ~]# echo "* ~ $(ls)"
* ~ err-output.txt
ln_123
ls-output.txt
ls.txt
me
mycat
mycat2.txt
mylog
mysql.tar.gz
q
s_ln_123
- 不加双引号的展开:结果按换行符进行展开了
[root@zabbix ~]# echo $(cal)
August 2018 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
- 双引号的展开:结果按原来结果输出
[root@zabbix ~]# echo "$(cal)"
August 2018
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
- 不展开
第8章:从shell眼中看世界/8.8 echo:引号展开/8.8.2 单引号禁用所有展开
- 单引号禁用所有展开
- 展开原则:单引号内部的所有内容都不能展开
- 举例:
-
[root@zabbix ~]# echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER'
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
-
第8章:从shell眼中看世界/8.9 echo:转义字符/8.9.1 双引号中使用转义字符
- 双引号中使用转义字符
- 对于特殊符号前面加\,使其不进行特殊处理,特殊符号比如:$、’
- 举例:
- 不加转移符会输出空,因为$1中的1不是变量
[root@zabbix ~]# echo "we give you $100"
we give you 00
- 加了转移符后显示正常
[root@zabbix ~]# echo "we give you \$100"
we give you $100
- 不加转移符会输出空,因为$1中的1不是变量
第8章:从shell眼中看世界/8.9 echo:转义字符/8.9.2 单引号中使用转义字符
- 单引号中使用转义字符
- 注意:单引号内所有展开或者转义都失效
- 举例:
[root@zabbix ~]# echo 'we give you \$100'
we give you \$100
第8章:从shell眼中看世界/8.9 echo:转义字符/8.9.3 转义序列
- 转义序列
- 概念:由\和指定字符组成
- 转义序列包括:
- \a: 响铃(”警告”-导致计算机嘟嘟响) |
- \b: 退格符 |
- \n: 新的一行。在类 Unix 系统中,产生换行。 |
- \r : 回车符 |
- \t: 制表符 |
- 使用转义序列:用 echo -e 解释转义序列,举例:
[root@zabbix ~]# sleep 10; echo -e "Time's up\t"
Time's up