主要是对linux命令号中一些经常会遗漏的事项的记录。
-
命令行中执行for和if等语句命令,原来在脚本中换行的地方用;代替:
for name in $(ls); do if [[ "$name" == "te" ]] ; then echo $name;fi;done
-
eval命令:会扫描两遍,第一次做变量替换,第二次如果是命令则执行该命令,用于执行一些需要变量替换的命令
-
shell中单引号替换环境变量 双引号不替换
-
小括号的妙用:(cd /usr;ls) 假如当前目录是home,执行完还是home目录
-
sz命令传文件夹使用 sz data/* ,不包含文件夹本身
-
注意在空目录下使用*的问题,*会报错,例如:test文件夹为空,
ls test/*
命令报错 -
登录时指定.bashrc的问题,另外bash的PS1变量导致长命令行不能换行的问题
-
注意重定向的顺序问题,在执行前会先清空文件
-
cat <<EOF和cat -
-
pstree命令指定进程直接在后面加上进程号就行,-p打印线程 -a打印命令行
-
(shell)在子进程中运行命令,{shell}用于在当前shell中运行命令,{}需要注意括号与命令之间包含空格,确保列表最后一个命令以分号结尾
-
bash参数:
摘录自阮一峰
set -x 用于调试,输出正在执行的命令
set -e 前一个命令执行出错直接退出(默认继续执行)
set -u 如果遇到不存在的变量报错(默认忽略)
set -o pipefail 如果设置了-e,管道命令看的是最后一个命令的执行结果,如果需要管道前一个执行失败就退出时使用
也可以在bash外面使用: bash -euxo pipefail script.sh
- ``和$()的区别:
echo `echo \\` # 输出
echo $(echo \\) # 输出\
# 反单号中的有转义,需要用\才能表示本来的