Linux中的'!'符号或操作符可以用作逻辑否定运算符,也可以用于在历史记录中获取命令并进行修改或运行以前执行过的命令。
[email protected]:~/www.linuxmi.com$ history
$ !58
$ history
$ !-3
$ !-6
$ !-10
$ ls /home/linuxmi/snap
$ ls -l !$
[email protected] ~/www.linuxmi.com
% touch /home/linuxmi/linuxmi.go
[email protected] ~/www.linuxmi.com
% cp /home/linuxmi/linuxmi.go /home/linuxmi/go
[email protected] ~/www.linuxmi.com
% echo "第一个参数是:!^"
echo "第一个参数是:/home/linuxmi/linuxmi.go"
第一个参数是:/home/linuxmi/linuxmi.go
[email protected] ~/www.linuxmi.com
% echo "第二个参数是:!cp:2"
echo "第二个参数是:/home/linuxmi/go"
第二个参数是:/home/linuxmi/go
$ ls /home > /dev/null [Command 1]
$ ls -l /home/linuxmi/linuxmi > /dev/null [Command 2]
$ ls -la /home/linuxmi/linuxmi.com > /dev/null [Command 3]
$ ls -lA /usr/bin > /dev/null [Command 4]
$ ! ls [Command 1]
$ ! ls -l [Command 2]
$ ! ls -la [Command 3]
$ ! ls -lA [Command 4]
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/
然后突然我发现我需要将上述脚本的输出重定向到一个名为ip.txt的文件中,那么我该怎么办呢?我需要重新输入整个命令并将输出重定向到文件吗?好吧,一个简单的解决方案是使用上箭头键来调出上一条命令,并在末尾添加'> ip.txt'来将输出重定向到文件。
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt
感谢上箭头键的救命作用。现在考虑以下情况,下次我运行下面的单行脚本。
ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:
当我运行脚本时,bash提示返回了一个错误,信息为“bash: ifconfig: command not found”,我很容易猜到我以一个普通用户的身份运行了这个命令,而它应该以root身份运行。
su -c “!!” root
$ rm !(important_file.txt)
$ $ rm !(*.pdf)
/home/linuxmi/linuxmi.com
]的输出为0时,它将执行逻辑与之后的内容,否则它将转到逻辑或(||)并执行逻辑或之后的内容。$ [ ! -d /home/linuxmi/linuxmi.com ] && printf '\nno such /home/linuxmi/linuxmi.com directory exist\n' || printf '\n/home/linuxmi/linuxmi.com directory exist\n'
类似于上面的条件,但是如果所需目录不存在,它将退出命令。
$ [ ! -d /home/linuxmi/linuxmi.com] && exit
[ ! -d /home/linuxmi/linuxmi.com] && mkdir /home/linuxmi/linuxmi.com
如果你知道或遇到了其他值得了解的'!'的用法,请在评论区留言交流学习奥!
《Docker中Image、Container与Volume的迁移》
免责声明:本文内容来源于网络,所载内容仅供参考。转载仅为学习和交流之目的,如无意中侵犯您的合法权益,请及时联系Docker中文社区!