1.1 变量类型
几乎所有的编程语言都有变量的概念,Bash当然也不例外。说道变量就少不了说一说类型。但与其他语言不同的是Bash属于无类型语言,如果强要说一种类型,可以认为都是字符串。说到这里,你可能会说,Bash里面也有整数类型吧,好像有整数的运算。但其是通过一些运算符,表达式或者命令将字符串视作整数处理的,其本质还是字符串。
1.2 声明变量
Bash中的变量和其他脚本语言一样,都是无需声明,直接拿来用的。所以变量的第一次出现都是伴随着初始化的。
1.3 取用变量
变量前加一个 $ 符号。称作dollar符,就是美元符号。这是最基本的一种取用方式,其他的方式以后再表。
12 |
a="hello world" echo $a |
终端会打印出 hello world。当然你可以把变量和常量字符串放到一起来打印,比如
12 |
boy=Jellyecho "$boy:hello world!" |
结果为 Jelly:hello world!
1.4 初始化/赋值变量
Bash中的变量由于无需声明,所以第一次出现都会伴随初始化。Bash中的变初始化(或赋值)方式共有三种:直接赋值、读取输入和命令替换。
1.4.1 直接赋值
直接赋值就是使用一个等于号了,这在其他编程语言里也很常见,比如:
1234 |
a=123b=abcc=‘123’d=“hello world” |
注意空格
需要注意的是等号左右不能有空格!!!比如如果出现a = 22
,执行该.sh时则会直接报错
关于引号
其次要理解的是,由于刚才说过的所有变量都可视作字符串,所以其实a=123和a=“123”没什么不同。不过如果你的变量包含空格就一定需要用引号来包裹了。
单引号和双引号一般情况下作用相同,除了某些特殊情况:
1234 |
a="I'm Jelly"b='Jelly:"Hi"'echo $aecho $b |
当字符串中含有单引号那么外面要用双引号,反之亦然。
1.4.2 读取输入
读取终端的输入给变量赋值,就是使用read命令。read和echo一样都是内嵌命令。直接看代码:
123 |
echo -n "Please Input your name:"read nameecho "Hi,$name,welcome to uncle Jelly's cabin!" |
或者可以使用read命令的 -p 选项来简化上述代码:
12 |
read -p "Please Input your name:" nameecho "$name,welcome to uncle jelly's cabin!" |
1.4.3 命令替换
这是非常实用的一种初始化或赋值的方式。利用其他命令的输出来给一个变量赋值。这需要用到反引用符号(“`”)
1234 |
dir=`pwd`tim=`date`echo "我在$dir目录下"echo "现在时间是$time" |
这里调用了pwd和date两个命令。你可以直接在终端键入这两个命令,看看打印结果。反引号就是把``中命令中的输出赋值给变量。
注意
使用反引号进行命令替换赋值,且直接打印该变量时,变量中的n
换行符会被替换成空格:
12345 |
ps1=`ps`echo $ps1 ps2=`ps`echo "$ps2" |
除此之外,也可以通过$()
的方式进行命令替换赋值:
1234 |
dir=$(dir)tim=$(date)echo "$dir"echo "$tim" |
Note:
- 修改shell脚本权限或执行shell脚本的时候,在shell脚本名前加./,即当前目录下查找,否则会在PATH下开始查找,避免不必要的麻烦
- 当shell脚本执行过程中发现shell脚本存在错误时(比如使用了一个未定义的变量),该错误代码会被跳过,并且继续执行错误代码之后的所有代码(而不是立刻执行当前shell脚本的执行)
2 数值计算
前面提到,Bash把所有变量都视为字符串。比如,a=1+2,$a并不等于3,而是等于字符串1+2
。因此Bash中的数学计算并不如其他语言那样简便。
运算符[]
为了解决这个问题,我们可以使用运算符[]
。
在中括号中引用变量可以直接使用变量名,也可以使用$加变量名
1234567891011 |
a=2b=3 c1=$[$a+4]echo $c1 c2=$[a+5]echo $c2 c3=$[$a+$b]echo $c3 |
expr及其反引用
1234567 |
a=2b=3expr $a + $bexpr $a - $bexpr $a * $bexpr $a / $bexpr $a % $b |
需要注意的是:
- 操作符和操作数之间一定要有空格间隔
- 操作数(即变量)前必须有$符
- 乘号*,要用反斜杠进行转义
- 该命令会将计算结果打印到标准输出
- 仅支持整数运算
- 也可以直接使用数字的字面值
将expr的计算结果赋值给一个变量呢:
1 |
c=`expr $a + $b` |
Reference
- https://blog.csdn.net/guodongxiaren/article/details/38402577
- https://blog.csdn.net/huangchunxia_1/article/details/79649481
- https://blog.csdn.net/guodongxiaren/article/details/39544805
- https://blog.csdn.net/column/details/wanbash.html
原文:大专栏 【Linux】Bash脚本
原文地址:https://www.cnblogs.com/peterchan1/p/11640768.html