本文共 2561 字,大约阅读时间需要 8 分钟。
在shell脚本编写中,命令的执行顺序至关重要。shell提供了两种主要的控制命令执行顺序的符号:逗号(
)和竖线(|
)。以下是它们的作用和使用方法。
)的使用逗号用于同时执行命令列表。如果左边的命令成功执行,右边的命令才会继续执行。命令的布局如下:
命令1 命令2 ...
mv myfile myfile2 echo "如果你看到这条消息,说明mv命令成功了!"
mv myfile myfile2
命令成功执行,执行完毕后,shell会继续执行echo "如果你看到这条消息,说明mv命令成功了!"
命令。mv myfile myfile2
命令失败,整个命令链会停止,且不会执行后续命令。从一个审计文件中抽取第1个和第2个域,并将其输出到一个临时文件中,如果这一操作未成功,我希望能够收到一个相应邮件:
awk '{print$1,$2}' test3 > test2 || echo "抱歉提取失败" | mail root
awk '{print$1,$2}' test3 > test2
命令成功,结果会被保存到test2
文件中。awk '{print$1,$2}' test3 > test2
命令未能成功,shell会执行echo "抱歉提取失败" | mail root
,向root
用户发送一封提醒邮件。|
)的使用竖线用于指定命令的顺序,左边的命令失败时,右边的命令才会执行。命令的布局如下:
命令1 || 命令2 || ...
mv myfile myfile2 || echo "如果mv命令失败,执行此命令"
mv myfile myfile2
命令成功,echo "如果mv命令失败,执行此命令"
不会被执行。mv myfile myfile2
命令失败,echo "如果mv命令失败,执行此命令"
会被执行。{ }
的使用在shell中,{ }
可以用来包裹命令,启动子shell。子shell的执行环境独立于当前shell,只有在所有命令的输出作为整体重定向时,子shell才会被执行。命令的布局如下:
命令1 && (子命令1 ; 子命令2) || (子命令3 ; 子命令4)
test_sorted && (cp test_sorted test_sorted_bak ; lp test_sorted)
test_sorted
命令执行成功后,启动子shell,执行cp test_sorted test_sorted_bak
和lp test_sorted
命令。test_sorted
命令失败,整个命令链会停止,无需执行子命令。grep命令是处理文本数据的强大工具,支持使用正则表达式匹配文本。以下是一些常用的正则表达式示例:
^
the
开头的行:grep '^the' file
the
结尾的行:grep 'the$' file
signa
或Signa
的单词:grep '[sS]igna[lL]' file
dd-mmm-yyyy
:grep '[0-9]{2}-[0-9]{3}-[0-9]{4}' date.log
grep命令提供了多种高级选项,常用于优化匹配结果:
grep -in "code" file
grep -in "code" file | grep "02"
使用-E
参数可以使用扩展模式。例如,匹配“219”或“216”:
grep -E '219|216' tab2
查询包含“Sort”但不包含“Sort”的文件:
grep -v "Sort" tab2
忽略大小写匹配“Sort”:
grep -in "Sort" tab2
只输出匹配行的计数:
grep -c "Sort" tab2
精确匹配“01”:
grep "01" test.log
忽略大小写匹配“code”或“02”:
grep -in "code" tab2 | grep "02"
要查看DNS服务器是否正在运行,可以使用以下命令:
ps -ef | grep "name" | grep -v "grep"
ps -ef
显示系统进程,grep "name"
筛选出名为“name”的进程,grep -v "grep"
排除自身进程。egrep(扩展grep)支持使用类名进行匹配,例如:
匹配包含空格或tab
键的单词:
egrep '[ :space: ]|tab' file
匹配包含数字或字母的单词:
egrep '[0-9A-Za-z]' file
匹配带有句点和两个数字的行:
egrep "^.*\.[0-9][0-9]" file
匹配日期格式dd-mmm-yyyy
:
egrep '[0-9]{2}-[0-9]{3}-[0-9]{4}' date.log
匹配包含dev
或Dev
的单词:
egrep '[dD]ev' file
通过合理使用逗号、竖线、{ }
和正则表达式,可以有效地控制命令的执行顺序和匹配文本。这些技巧在日常的系统管理和数据处理中非常有用,能够帮助用户更高效地完成任务。
转载地址:http://zskfk.baihongyu.com/