LinuxBash脚本
Posted peterchan1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LinuxBash脚本相关的知识,希望对你有一定的参考价值。
1.1 变量类型
几乎所有的编程语言都有变量的概念,Bash当然也不例外。说道变量就少不了说一说类型。但与其他语言不同的是Bash属于无类型语言,如果强要说一种类型,可以认为都是字符串。说到这里,你可能会说,Bash里面也有整数类型吧,好像有整数的运算。但其是通过一些运算符,表达式或者命令将字符串视作整数处理的,其本质还是字符串。
1.2 声明变量
Bash中的变量和其他脚本语言一样,都是无需声明,直接拿来用的。所以变量的第一次出现都是伴随着初始化的。
1.3 取用变量
变量前加一个 $ 符号。称作dollar符,就是美元符号。这是最基本的一种取用方式,其他的方式以后再表。
1 | a="hello world" |
终端会打印出 hello world。当然你可以把变量和常量字符串放到一起来打印,比如
1 | boy=Jelly |
结果为 Jelly:hello world!
1.4 初始化/赋值变量
Bash中的变量由于无需声明,所以第一次出现都会伴随初始化。Bash中的变初始化(或赋值)方式共有三种:直接赋值、读取输入和命令替换。
1.4.1 直接赋值
直接赋值就是使用一个等于号了,这在其他编程语言里也很常见,比如:
1 | a=123 |
注意空格
需要注意的是等号左右不能有空格!!!比如如果出现a = 22
,执行该.sh时则会直接报错
关于引号
其次要理解的是,由于刚才说过的所有变量都可视作字符串,所以其实a=123和a=“123”没什么不同。不过如果你的变量包含空格就一定需要用引号来包裹了。
单引号和双引号一般情况下作用相同,除了某些特殊情况:
1 | a="I'm Jelly" |
当字符串中含有单引号那么外面要用双引号,反之亦然。
1.4.2 读取输入
读取终端的输入给变量赋值,就是使用read命令。read和echo一样都是内嵌命令。直接看代码:
1 | echo -n "Please Input your name:" |
或者可以使用read命令的 -p 选项来简化上述代码:
1 | read -p "Please Input your name:" name |
1.4.3 命令替换
这是非常实用的一种初始化或赋值的方式。利用其他命令的输出来给一个变量赋值。这需要用到反引用符号(“`”)
1 | dir=`pwd` |
这里调用了pwd和date两个命令。你可以直接在终端键入这两个命令,看看打印结果。反引号就是把``中命令中的输出赋值给变量。
注意
使用反引号进行命令替换赋值,且直接打印该变量时,变量中的n
换行符会被替换成空格:
1 | ps1=`ps` |
除此之外,也可以通过$()
的方式进行命令替换赋值:
1 | dir=$(dir) |
Note:
修改shell脚本权限或执行shell脚本的时候,在shell脚本名前加./,即当前目录下查找,否则会在PATH下开始查找,避免不必要的麻烦
当shell脚本执行过程中发现shell脚本存在错误时(比如使用了一个未定义的变量),该错误代码会被跳过,并且继续执行错误代码之后的所有代码(而不是立刻执行当前shell脚本的执行)
2 数值计算
前面提到,Bash把所有变量都视为字符串。比如,a=1+2,$a并不等于3,而是等于字符串1+2
。因此Bash中的数学计算并不如其他语言那样简便。
运算符[]
为了解决这个问题,我们可以使用运算符[]
。
在中括号中引用变量可以直接使用变量名,也可以使用$加变量名
1 | a=2 |
expr及其反引用
1 | a=2 |
需要注意的是:
- 操作符和操作数之间一定要有空格间隔
- 操作数(即变量)前必须有$符
- 乘号*,要用反斜杠进行转义
- 该命令会将计算结果打印到标准输出
- 仅支持整数运算
- 也可以直接使用数字的字面值
将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脚本
以上是关于LinuxBash脚本的主要内容,如果未能解决你的问题,请参考以下文章