bash中的特殊字符,键盘上能敲出来的特殊字符都有其特殊意义,强调一点:元字符是被shell解释的
`` 取命令的执行结果
[root@MiWiFi-R3-srv ~]# ls
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz[root@MiWiFi-R3-srv ~]# res=`ls` #取命令的运行结果,赋值给变量res[root@MiWiFi-R3-srv ~]# echo $res #查看变量res的值4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz$()同上,但它弥补了``的嵌套缺陷
[root@MiWiFi-R3-srv ~]# res=`echo `ls`` #嵌套使用后无法达到预想的效果:取echo 一堆文件名的效果。
[root@MiWiFi-R3-srv ~]# echo $res
ls[root@MiWiFi-R3-srv ~]# res=$(echo $(ls)) #替代方案
[root@MiWiFi-R3-srv ~]# echo $res4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz~ 家目录
[root@MiWiFi-R3-srv tmp]# cd ~
[root@MiWiFi-R3-srv ~]# pwd/root! 取非
[root@MiWiFi-R3-srv ~]# ls /dev/sda
sda sda1 sda2 [root@MiWiFi-R3-srv ~]# ls /dev/sda[0123]/dev/sda1 /dev/sda2[root@MiWiFi-R3-srv ~]# ls /dev/sda[!01]/dev/sda2! 历史命令调用
[root@MiWiFi-R3-srv ~]# !343
hostnameMiWiFi-R3-srv! 匹配最近一次历史命令
[root@MiWiFi-R3-srv ~]# !ls
ls /dev/sda[!01]/dev/sda2! ls 带空格 将命令的返回值取反
[root@MiWiFi-R3-srv ~]# echo ok
ok[root@MiWiFi-R3-srv ~]# echo $? #上一条命令执行的结果,0代表执行成功,非0代表执行失败0[root@MiWiFi-R3-srv ~]# ! echo ok #将结果取反ok[root@MiWiFi-R3-srv ~]# echo $?1@ 无特殊含义
# 注释
$ 变量取值
$() 同``${} 变量名的范围[root@MiWiFi-R3-srv ~]# money=10
[root@MiWiFi-R3-srv ~]# echo $money 10[root@MiWiFi-R3-srv ~]# echo 00000$money0000010[root@MiWiFi-R3-srv ~]# echo $money0000[root@MiWiFi-R3-srv ~]# echo ${money}0000
100000t@myworld tmp]# money=5
[root@myworld tmp]# echo ${money}000050000$[] 整数计算 echo $[2+3] - * / %
[root@myworld tmp]# x=10
[root@myworld tmp]# echo $x10[root@myworld tmp]# echo $x+110+1[root@myworld tmp]# echo $[$x+1]11浮点数用 echo "scale=3; 10/3" | bc -l
[root@myworld tmp]# echo "scale=3;10/3"|bc -l
3.333[root@myworld tmp]# echo "scale=2;10/3"|bc -l3.33% 杀后台进程 jobs号; 取模
^ 取非 和 ! 雷同
[root@MiWiFi-R3-srv ~]# ls /dev/sda[^01]
/dev/sda2[root@MiWiFi-R3-srv ~]# ls /dev/sda[!01]/dev/sda2^ 替换
[root@MiWiFi-R3-srv ~]# systemctl restart network
[root@MiWiFi-R3-srv ~]# ^network^sshd^systemctl restart sshd& 后台执行;&& 逻辑与
* 匹配任意长度字符串;计算乘法
() 在子进程中执行
[root@MiWiFi-R3-srv ~]# x=1
[root@MiWiFi-R3-srv ~]# (x=666)[root@MiWiFi-R3-srv ~]# echo $x1[root@MiWiFi-R3-srv ~]# [root@MiWiFi-R3-srv ~]# (x=666;echo $x)666- 减号;区间;cd -;
_ 无特殊含义
+ 加号 ;
= 赋值
| 管道; || 逻辑或
\ 转义;
{} 命令列表 ,注意括号内的开头和结尾必须是空格{ ls; cd /; }
[] 字符通配,匹配括号内之一;
[ ]:比较变量数值大小,同test,注意括号内的开头和结尾必须是空格[ $x == $y ]:
[root@myworld /]# x=1
[root@myworld /]# y=2[root@myworld /]# test $x == $y[root@myworld /]# echo $?1[root@myworld /]# [ $x == $y ][root@myworld /]# echo $?1[root@myworld /]# [ $x < $y ][root@myworld /]# echo $?0: 空命令 真值
[root@MiWiFi-R3-srv ~]# :
[root@MiWiFi-R3-srv ~]# echo $?0; 可以接多个命令:ls;pwd;echo 123;无论对错,会一直执行到最后一条命令
* 通配符:任意字符
? 通配符:任一字符[root@myworld tmp]# ls *.txt
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt[root@myworld tmp]# ls ?.txt1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt [abc] 列表项之一 [^abc] 对列表取非 也可以使用范围 [a-z] 代表aAbBcC...z,[0-9]代表01234...9 {} 循环列表[root@MiWiFi-R3-srv test]# touch {1..3}{a..d}.txt
[root@MiWiFi-R3-srv test]# ls1a.txt 1b.txt 1c.txt 1d.txt 2a.txt 2b.txt 2c.txt 2d.txt 3a.txt 3b.txt 3c.txt 3d硬引用与软引用
[root@MiWiFi-R3-srv test]# x=1
[root@MiWiFi-R3-srv test]# echo "$x" #双引号的代表软引用,引号内特殊字符有特殊意义,比如$,``等1[root@MiWiFi-R3-srv test]# echo '$x' #单引号代表硬引用,引号内所有字符都无特殊意义$x\转意
'[root@myworld /]# x=1
[root@myworld /]# echo $x1[root@myworld /]# echo \$x$x[root@MiWiFi-R3-srv test]# echo "'"'