【收获】shell编程中的几个知识点

shell很强大,shell很直接,shell很抽象

eval()

在.sh代码中可以直接写命令。但在执行过程中出错时,欲将出错的命令(比如下面这句)自己手动在command line执行一次,就得打开文件,找到那个命令,copy&paste到command line,执行。

...
grep -e 'pattern' -r some/path
...

这有点烦。所以,我倾向于将所执行的关键命令echo出来,以在出错时,即刻从console copy出来执行。那就需要eval()了。即:先将命令存成一个变量,然后就可以eval()该变量来执行命令(同时也可以echo出来)。如下:

...
cmd="grep -e 'pattern' -r some/path"
echo $cmd // 程序稳定了可以把这行注释掉
eval($cmd)
...

$()

此方法可以将本应输出到stdout的内容输出到变量,以为后续程序所用

result=$(echo "hello")
// 此时result内容即为"hello"

这个例子太简单,看起来$()没什么用,但在实际中很有用。比如:你要检查某个命令的输出内容中是否含有某个关键字。

result=$(grep -o -e 'pattern' -r some/path)
if [ $result = 'keyword'; ] then
   // ok, found
else
   // not found
fi

记住:输出到stdout只能给人眼看,输出到变量,才能被程序使用

2>&1

有时,你需要将shell程序执行输出的log写入文件(以备后续排查问题),你应该知道这样写:

sh some/shell.sh > path/to/log

但这会漏掉STDERR,而他们是你定位bug的重要线索,可不能丢掉。所以,下面的写法才是正解:

sh some/shell.sh > path/to/log 2>&1

>> vs. >

下面写法为“追加”(即不清空已有内容)

sh some/shell.sh >> path/to/log

下面写法则是先清空,再写

sh some/shell.sh > path/to/log

综述

跟其他高级脚本语言相比(比如python),shell编程的优势在于:

  1. 无需安装解释器
  2. 所用命令绝大部分是我们在command line天天用的,不生分
    可以说,门槛比较低。作为程序猿,应该学一下子。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,386评论 2 33
  • 为何叫做 shell ? shell prompt(PS1) 与 Carriage Return(CR) 的关系?...
    Zero___阅读 8,420评论 3 49
  • 本文全面系统地介绍了shell脚本调试技术,包括使用echo, tee, trap等命令输出关键信息,跟踪变量的值...
    liuzg0734阅读 4,446评论 0 14
  • 背景(Background) 使用哪种 Shell(Which Shell to Use) Bash是唯一被允许执...
    haw_haw阅读 7,588评论 1 4
  • 概述 首先,咱们来了解一下,什么是Shell。操作系统内核给我们提供了各种接口,同时也提供了各种用户层的库,理论上...
    keysaim阅读 5,305评论 0 0

友情链接更多精彩内容