什么原因导致了字符串变特殊? 如果一个字符所代表的含义 超出了其原有的字面含义(\) 我们就会把它作为特殊字符处理 , bash脚本就是由各种命令\关键字\特殊字符等各种结构块构成
脚本及其他一些场景中用到的字符串
# 符号 : 注释.
1 一般注释的行都是以# 开始的(当然#!除外), 而且程序执行的时候,不会执行注释内容
1
# 这是一个注释
2, 命令行的结尾也可以添加注释
1
2echo "后面会添加一段注释." # 注释在这里
# 注意之前有空格可以存在#3, 一行的注释的#开头前可以添加空格
1
2
3
4
5
6
7
8# 之前有一个TAB的空格设置
```
4, 注释也可以添加在管道符之间
```bash
inital=(`cat "$startFile" | sed -e '/#/d' | tr -d '\n' | \
#删除包含'#'注释字符的内容行
sed -e 's/\./\. /g' -e 's/_/_ /g'` )
# 脚本内容摘录自 life.sh…
; 符号: 命令分割[分号] 允许一行中书写多条命令
1
2
3
4
5
6echo hello; echo world
if [ -X "$filename" ]; then #分号后面记得留有空格
echo success; cp $filename ${filename}.bak
else
echo fail
fi; echo "copy file successfully."Note that the “;” sometimes needs to be escaped.
;; 符号: case命令选项后需要添加的字符[双分号]
1
2
3
4case "$variable" in
abc) echo "\$variable=abc";;
bcd) echo "\$variable=bcd";;
esac;;& , ;& 符号: 在bash4.0+版本中 case命令的选项后使用的字符
.符号:
1, 等同于source命令,是一个bash内置命令[用法一]
"dot" command [period]. Equivalent to source (see Example 15-22). This is a bash builtin.
1
2
3
4
. data-file # 加载一个位于当前同一目录下 data-file文件,等同于 'source data-file' 方式
echo "variable1 (from data-file) = $variable1"
echo "variable3 (from data-file) = $variable3"2, 作为文件名的一部分,是一个隐藏文件的前缀
3, 作为目录名时,是指当前目录, 两个 . 代表上级父目录1
2cd . # cd $PWD
cd ..4, 作为正则规则内容时,一个.可以匹配一个单字符or空格
“ 符号: 一般主要用于特殊字符串的特殊标识[见第五章]
` 符号: 一般主要标注特殊字符串,优先级由于”
, 符号: 逗号运算符,
1, 作为赋值运算符分界
1
let "t2 = ((a= 9, 15/3))" # 设置a=9, t2=15/3
2, 作为字符串链接符
1
2
3
4
5
6
7for file in /{,usr/}bin/*sh
do
if [ -x "$file" ]
then
echo $file
fi
done“ ‘ 符号:
\ 符号: 转义[反斜线], //todo
/ 符号: 文件路径分隔符/或者运算符除法
` 符号: 命令替换
命令
意味着将命令执行结果赋予一个变量: 符号: 空命令行[冒号],等同于”NOP”(no op, 不进行任何操作), 一般被认为等同于shell内置 true,
1, 作为无限循环使用
1
2
3
4
5
6
7
8
9
10
11while :
do
operation-1
...
done
#等同于
#while true
#do
# operation-1
# ...
#done2, 在if/then 判断中使用
1
2
3
4
5if condition
then :
else
echo else
fi3, 与?配合 可做变量的值检查
1
: ${USER?} ${HOSTNAME?} ${MAIL?} #做USER,HOSTNAME,MAIL赋值检查, 如果变量不存在会输出错误信息
4, Provide a placeholder where a binary operation is expected, see Example 8-2 and default parameters.
1
2
3
4
5: ${username=`whoami`}
# ${username=`whoami`} Gives an error without the leading :
# unless "username" is a command or builtin...
: ${1?"Usage: $0 ARGUMENT"} # From "usage-message.sh example script.5, 与>符号配合,可以清空文件
1
: > xxx.txt # 将文件xxx.txt清空
6, 与>>符号配合,可以用于文件存在检查,不存在自动创建
1
: >> xxx.txt # 如果文件存在,不做任何处理,如果文件不存在,自动创建他
7, 作为字段分隔符
1
echo $PATH # /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/games
! 符号: 取反
* 符号: 通配符[星号]
1, 文件通配符
1
echo * # 输出当前目录下的所有文件名
2, 算术运算符(乘法)
? 符号:
1, 测试运算符(三元运算符)
1
(( varNew=varOld<0?1:2))
$ 符号:
1, 变量替换
1
2
3
4var1=5
var2=23kkjl
echo $var1 #5
echo $var2 #223kkjl2, 在正则匹配规则中作为内容结束符
${} 符号: 变量替换
$’…’ 符号:
1
2$' ... '
Quoted string expansion. This construct expands single or multiple escaped octal or hex values into ASCII [3] or Unicode characters.$*, $@ 符号: 位置参数,shell函数中,代表输入函数的参数内容
1, $* :
2, $@$? 符号: 标识当前shell 退出后返回的状态值
$$ 符号: 在脚本中标识当前进程ID
() 符号: 表示以子进程进行,子进程与父进程不相互影响
1
2
3a=123
(a=321)
echo $a #123{} 符号:
1, 文案替换 ,在 xargs -i 命令中使用时, {}符号就代表输出内容的替换
1
ls . | xargs -i -t cp ./{} $1
{} ; 符号: 绝对路径名; 一般用于在find命令中, 这里的 \; 是为了转义; 并表示结束
1
find . -name '*.php' -exec ls -l "{}" \;
{xxx,yyy,zzz} 符号: 花括号字符串扩展
1
2echo \"{aaa,bbb,ccc}\" # "aaa" "bbb" "ccc"
cp file22.{txt, txt.backup} # 拷贝file22.txt 文件到file22.txt.backup中[ ] 符号: [ 是shell内置命令,等同于test, 一般用于if判断是包裹条件 ]符号只是为了表示条件结尾
1
2
3
4if [ -n $name ]
then
echo "Good $name"
fi[[ ]] 符号: 比起[] ,这个shell关键字中的表达式更灵活;