shell Meta元字符,整个shell解释器中都支持的特殊字符,并有特殊的含义
> 该符号为重定向符号,重定向只收集前面命令的正确输出结果,并且是覆盖重定向。
例如:
ls -d /opt /opt/123 > /opt/test
#/opt是正确输出结果,/opt/123不存在,也就是错误输出,那么test文件里就只能看到/opt这一个内容
>> 该符号为追加重定向符号,追加重定向也是只收集前面命令的正确输出结果,也是覆盖重定向。
例如:
ls -d /opt /opt/123 >> /opt/test
#test文件里本来有内容123456
#/opt是正确输出结果,/opt/123不存在,也就是错误输出
#那么test文件里就能看到 123456 和 /opt 这两个内容
< 该命令可以把后面的参数,或者文本内容输出给前面的命令
比如:
mail -s test root < a.txt
#把a.txt里的内容输入到root用户的test邮件里,并且不会交互
2> 只收集前面命令的错误输出
例如:
ls -d /opt /opt/123 2> /opt/test
#/opt是正确输出结果,/opt/123不存在,也就是错误输出,那么test文件里就只能看到 ls: cannot access /root/haha: No such file or directory 这个内容
&> 收集前面命令的全部输出
例如:
#!/bin/bash
ls /root/1.txt /root/haha/ &> /opt/haha
#1.txt脚本是正确的,/root/haha是错误输出,其输出的所有结果都会被写进/opt/haha中
>&2 将面命令的输出结果定义为错误输出,通常在脚本中还要与exit连用,必须赋予返回值
shell脚本中人为定义错误输出:
例:
if [ $# -eq 0 ];then
echo "您没有输入参数" >&2 #将其定义为错误输出
exit 2 #还要定义这个错误输出的返回值,只有返回值是非0才是异常
fi
在终端执行完这个脚本,再 echo $? 可以看到输出一个数字2,说明系统已经认定这次执行结果为错误了。
提示:所有的重定向符号都有新建文本的功能
$变量名 取变量值
例如:
$a 取a变量的值,引用a这个变量
; 在前一个命令结束时,而忽略其返回值,继续执行下一个命令
例如:
[ $USER == root ];echo $?
不管;前面的命令执行是否成功,两条命令都会执行
比如:
ls /opt/haha;echo 123
#haha不存在,这一条命令会报错,紧接着还会再输出123
&& 在前一个命令结束时,若返回值为 true,继续执行下一个命令
|| 在前一个命令结束时,若返回值为 false,继续执行下一个命令
\ 转译字符,去除其后紧跟的元字符或通配符的特殊意义
${x:-30}
可以在终端命令行中使用,可以看x有没有值,有值就返回x的值,没有就返回30
seq 可以对数字或者变量进行排序
终端命令行中输入seq 3就会在屏幕中输出1 2 3
如果a=5 则seq a会输出1 2 3 4 5
————————————————————————————————————————————————————————————————————————————————————
黑洞设备:/dev/null 将所有内容自动销毁
例如:
vim /opt/test
ls /opt/haha /opt/aa > /dev/null
#意思就是将所有输出结果,不管正确与否,都丢进黑洞,不显示任何输出
————————————————————————————————————————————————————————————————————————————————————
取消特殊字符意义的方法:
使用 ' ' 和 " "符号
它俩的作用差不多,都是界定范围,这个范围里的东西属于一个整体
但是"" 不会取消掉这里面的特殊含义
例:echo '$a' 会直接输出$a,而如果是" "则会输出这个变量的值
————————————————————————————————————————————————————————————————————————————————————
输出命令的执行结果,用于其他命令的运行:
使用` `或$( ) 可以将里面命令的输出结果,直接用于参与其它命令的运行
例:mkdir /opt/nsd$(date +%F) #这就是直接将日期结果作为文件名的一部分了
————————————————————————————————————————————————————————————————————————————————————
管道符:|
将前面命令的参数作为后者的参数
echo "1234" | passwd root --stdin
#将1234作为passwd命令执行的参数,非交互的改密码
————————————————————————————————————————————————————————————————————————————————————
把命令放在后台执行 &
————————————————————————————————————————————————————————————————————————————————————
取反 !
在sed命令中,shell中的数值运算条件测试等都是取反的意思,在很多语言中!都代表取反。
————————————————————————————————————————————————————————————————————————————————————
通配符:
通配符一般是用来匹配路径和文件名称的,通常和find、rm、ls、cp一起使用
* 匹配 0 或多个字符
? 匹配任意一个字符
[] 匹配 [] 中的任意单一字符
{} 比如:{a1,b2}匹配 a1 或 b2 其中任意一个字符串