【Linux】Bash脚本

1.1 变量类型

几乎所有的编程语言都有变量的概念,Bash当然也不例外。说道变量就少不了说一说类型。但与其他语言不同的是Bash属于无类型语言,如果强要说一种类型,可以认为都是字符串。说到这里,你可能会说,Bash里面也有整数类型吧,好像有整数的运算。但其是通过一些运算符,表达式或者命令将字符串视作整数处理的,其本质还是字符串。

1.2 声明变量

Bash中的变量和其他脚本语言一样,都是无需声明,直接拿来用的。所以变量的第一次出现都是伴随着初始化的。

1.3 取用变量

变量前加一个 $ 符号。称作dollar符,就是美元符号。这是最基本的一种取用方式,其他的方式以后再表。

1
2
a="hello world"  
echo $a

终端会打印出 hello world。当然你可以把变量和常量字符串放到一起来打印,比如

1
2
boy=Jelly
echo "$boy:hello world!"

结果为 Jelly:hello world!

1.4 初始化/赋值变量

Bash中的变量由于无需声明,所以第一次出现都会伴随初始化。Bash中的变初始化(或赋值)方式共有三种:直接赋值、读取输入和命令替换。

1.4.1 直接赋值

直接赋值就是使用一个等于号了,这在其他编程语言里也很常见,比如:

1
2
3
4
a=123
b=abc
c=‘123
d=“hello world”
注意空格

需要注意的是等号左右不能有空格!!!比如如果出现a = 22,执行该.sh时则会直接报错

image-20180918165431334

关于引号

其次要理解的是,由于刚才说过的所有变量都可视作字符串,所以其实a=123和a=“123”没什么不同。不过如果你的变量包含空格就一定需要用引号来包裹了。

单引号和双引号一般情况下作用相同,除了某些特殊情况:

1
2
3
4
a="I'm Jelly"
b='Jelly:"Hi"'
echo $a
echo $b

当字符串中含有单引号那么外面要用双引号,反之亦然。

1.4.2 读取输入

读取终端的输入给变量赋值,就是使用read命令。read和echo一样都是内嵌命令。直接看代码:

1
2
3
echo -n "Please Input your name:"
read name
echo "Hi,$name,welcome to uncle Jelly's cabin!"

或者可以使用read命令的 -p 选项来简化上述代码:

1
2
read -p "Please Input your name:" name
echo "$name,welcome to uncle jelly's cabin!"

1.4.3 命令替换

这是非常实用的一种初始化或赋值的方式。利用其他命令的输出来给一个变量赋值。这需要用到反引用符号(“`”)

1
2
3
4
dir=`pwd`
tim=`date`
echo "我在$dir目录下"
echo "现在时间是$time"

这里调用了pwd和date两个命令。你可以直接在终端键入这两个命令,看看打印结果。反引号就是把``中命令中的输出赋值给变量。

image-20180918164616012

注意

使用反引号进行命令替换赋值,且直接打印该变量时,变量中的n换行符会被替换成空格:

1
2
3
4
5
ps1=`ps`
echo $ps1

ps2=`ps`
echo "$ps2"

image-20180918165220708

除此之外,也可以通过$()的方式进行命令替换赋值:

1
2
3
4
dir=$(dir)
tim=$(date)
echo "$dir"
echo "$tim"

image-20180918165725699

Note:
  • 修改shell脚本权限或执行shell脚本的时候,在shell脚本名前加./,即当前目录下查找,否则会在PATH下开始查找,避免不必要的麻烦

    image-20180918170334310

  • 当shell脚本执行过程中发现shell脚本存在错误时(比如使用了一个未定义的变量),该错误代码会被跳过,并且继续执行错误代码之后的所有代码(而不是立刻执行当前shell脚本的执行)

image-20180918171320281

2 数值计算

前面提到,Bash把所有变量都视为字符串。比如,a=1+2,$a并不等于3,而是等于字符串1+2。因此Bash中的数学计算并不如其他语言那样简便。

运算符[]

为了解决这个问题,我们可以使用运算符[]

在中括号中引用变量可以直接使用变量名,也可以使用$加变量名

1
2
3
4
5
6
7
8
9
10
11
a=2
b=3

c1=$[$a+4]
echo $c1

c2=$[a+5]
echo $c2

c3=$[$a+$b]
echo $c3

image-20180918192233448

expr及其反引用

1
2
3
4
5
6
7
a=2
b=3
expr $a + $b
expr $a - $b
expr $a * $b
expr $a / $b
expr $a % $b

需要注意的是:

  • 操作符和操作数之间一定要有空格间隔
  • 操作数(即变量)前必须有$符
  • 乘号*,要用反斜杠进行转义
  • 该命令会将计算结果打印到标准输出
  • 仅支持整数运算
  • 也可以直接使用数字的字面值

将expr的计算结果赋值给一个变量呢:

1
c=`expr $a + $b`

Reference

原文:大专栏  【Linux】Bash脚本


猜你喜欢

转载自www.cnblogs.com/sanxiandoupi/p/11639502.html
今日推荐