Linux 命令中“!”操作符的 8 个神秘用途
Linux中的’!’符号或操作符可以用作逻辑否定运算符,也可以用于在历史记录中获取命令并进行修改或运行以前执行过的命令。
1、使用命令编号从历史记录中运行命令
linuxmi@linuxmi:~/www.linuxmi.com$ history

!58

2、在Linux中运行先前执行的命令
你可以使用!-n,其中n是你要引用的命令的倒数编号。如下图
history
!-3
!-6
!-10

3、将先前命令的参数传递给新命令
ls /home/linuxmi/snap
ls -l !$

4、如何处理命令中的两个或多个参数
linuxmi@linuxmi ~/www.linuxmi.com
touch /home/linuxmi/linuxmi.go
linuxmi@linuxmi ~/www.linuxmi.com
% cp /home/linuxmi/linuxmi.go /home/linuxmi/go
linuxmi@linuxmi ~/www.linuxmi.com
% echo "第一个参数是:!^"
echo "第一个参数是:/home/linuxmi/linuxmi.go"
第一个参数是:/home/linuxmi/linuxmi.go
linuxmi@linuxmi ~/www.linuxmi.com
% echo "第二个参数是:!cp:2"
echo "第二个参数是:/home/linuxmi/go"
第二个参数是:/home/linuxmi/go

5、根据特定关键词运行最近的命令
$ 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]

6、在Linux中重复上次执行的命令
$ 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
7、使用’!’操作符删除除一个文件之外的所有文件
要从目录中删除除了特定文件(important_file.txt)之外的所有文件,可以使用带有’!’操作符的rm命令,如下所示。
rm !(important_file.txt)
$ $ rm !(*.pdf)
8、检查Linux中的目录是否存在
/home/linuxmi/linuxmi.com
]的输出为0时,它将执行逻辑与之后的内容,否则它将转到逻辑或(||)并执行逻辑或之后的内容。
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
暂时就这些。如果你知道或遇到了其他值得了解的'!'的用法,请在评论中告诉我们。扫码领红包
微信赞赏
支付宝扫码领红包
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。侵权投诉:375170667@qq.com