在Bash脚本中,我们经常要先执行某个命令行,然后判断它是否执行成功,这时我们要对它的退出码进行判断。罗嗦一些的写法如下:
if [ $? -eq 0 ] then echo "Success" fi
简洁的写法如下:
[ $? -eq 0 ] && echo "Success"
又如,判断是否有某个目录,如果没有就终止脚本执行,罗嗦一些的写法如下:
if [ ! -d "$DIR" ]; then exit 1fi
简洁的写法如下:
[ -d "$DIR" ] || exit 1
好多人习惯上这样写:
cat /etc/passwd | grep root
其实下面的写法更好,不需要执行cat命令、不需要管道线:
grep root /etc/passwd
一般人都这样写:
if true; then cat >some.txt <<EOF123345567789EOFfi
这样写,最后那个EOF就要顶格写,破坏了程序应有的缩进格式,最好如下写法:
if true; then cat >some.txt <<-EOF 123 345 567 789 EOFfi
很简单:
head -1 file.txt
如果用sed来实现,可以是:
sed -n '1p' file.txt
但上面这个命令会导致整个文件都会读取一遍,对于大数据量的文件效率实在不高。如果能够在读取完了1行之后,就不再读取呢,下面的命令行可以做到:
sed -n '1p;1q' file.txt
通常想到的方式是:
grep 502 /etc/passwd | cut -d: -f1
或者这样:
grep 502 /etc/passwd | awk -F":" '{print $1}'
其实一条awk命令就可以做到,不需要用到管道线:
联系客服