1.在赋值的前后一定不要有空格,否则系统会将变量当作命令来运行
如果: "VARIABLE =value"
脚本将尝试运行一个"VARIABLE"的命令,带着一个" =value"参数
2. hello="A B C D"
echo $hello # A B C D 使用变量替换,空格被过滤掉了
echo "$hello" # A B C D 使用引用变量,能够保留其中的空格
echo '$hello' # $hello 使用单引号全引用,会将$作为符号输出,相当于"/$hello"
3. unset 将一个变量设为空
空值变量做算术运算,相当于0
4. = 赋值,使用let赋值
a=879
echo "The value of /"a/" is $a"
let a=16+5
echo "The value of /"a/" is now $a"
a='ls -l'
echo $a #ls-l 空的部分(包括换行)被去除了
echo "$a" #引用正常,输出合适结果
使用$(...)机制进行变量赋值,跟' '的作用类似
R=$(cat /etc/redhat-release)
arch=$(uname -m)
5. Bash变量不对类型进行区分,本质上Bash变量都是字符串
a=2334
let "a+=1"
echo "a=$a" #a=2335
b=${a/23/BB} #将23替换成BB
echo "b=$b" #b=BB35
let "b+=1"
echo "b=$b" #b=1
6. 特殊变量类型
local variables
enviornental variables 环境变量
position parametres $0, $1, $2 ...
$0就是脚本文件的文字,$1就是第1个参数,$2第二个参数...
$9以上就要用大括号:
${10},${11},${12}
$*,$@,表示所有的位置参数
7. basename命令去掉一个路径名(文件名)的目录部分和后缀部分,只保留文件名:
例如:
basename /usr/bin/sort #sort
basename include/stdio.h .h #stdio
8. args=$# #获得参数个数
lastarg=${!args} #获得最后一个参数
#或 lastarg=${!#} 但 lastarg=${!$#}会报错
9. shift命令,将参数的顺序左移
$1<-$2<-$3...
但脚本名$0不变