#脚本只要发生错误,就终止执行
set -e
#解决管道的情况,只要一个子命令失败,整个管道命令就失败,脚本会终止执行
set -eo pipefail
#每行行首增加特殊字符
sed -i "s#^#\\\'&#g" test.txt
#每行行尾增加特殊字符
sed -i "s#$#\\\'#g" test.txt
#文本中多行合并到一行并以,间隔
paste -s test.txt -d","
shell中#*、##*、#*、%*、%%*等的含义
假设定义一个变量为:file=/dir1/dir2/dir3/my.file.txt
${file#*/}:删除第一个/及其左边的字符串---> dir1/dir2/dir3/my.file.txt (单个字符->截取掉第一个往左的内容)
${file##*/}: 删除最后一个/及其左边的字符串---> my.file.txt (双字符->截取最后一个匹配字符往左的全部内容)
${file#*.}: 删除第一个.及其左边的字符串---> file.txt
${file##*.}: 删除最后一个.及其左边的字符串--> txt
${file%/*}: 删除最后一个/及其右边的字符串---> /dir1/dir2/dir3 (单个字符->截取第一个往右的内容)
${file%%/*}: 删除第一个/及其右边的字符串--> (空置) (双字符-->截取最后一个匹配字符往右的全部内容)
${file%.*}: 删除最后一个.及其右边的字符串--> /dir1/dir2/dir3/my.file
${file%%.*}: 删除第一个.及其右边的字符串--> /dir1/dir2/dir3/my
shell指令,诸如-d -f -e之类的判断表达式
-e filename 如filename存在,则为真[ -e /var/log/syslog ]
-d filename 如果filename为目录,则为真[ -d /tmp/mydir ]
-f filename 如果filename为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果filename为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果filename可读,则为真 [ -r /var/log/syslog ]
-w filename 如果filename可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果filename可执行,则为真[ -x /usr/bin/grep ]
-z string 如果string长度为零,则为真 [ -z "$myvar" ]
-n string 如果string长度为零,则为真 [ -n "$myvar" ]