范例
交互式脚本
执行:
这里第一行的#!/bin/bash
用途是声明这个文件内使用bash的语法,当程序被执行时就能加载bash的相关环境配置文件。
利用日期建立文件
这里filename=${fileuser:-"filename"}
如果fileuser没有设置或者设置为空,则filename的名称就是“filename”。
数值运算:简单运算
这里也可以用declare -i total=${first}*${second}
求total
如果想计算含有小数点的数据,可以加上bc这个命令。
数值运算:通过bc求PI
其中4*a(1)
是bc提供的一个计算PI的函数,scale就是要bc计算机个小数点位的意思,scale表示越精确。
脚本执行方式
利用直接执行的方式执行脚本
之前利用sh(或bash)来执行脚本时,脚本都会使用一个新的bash环境执行脚本内的命令。叶菊是说这种执行方式是脚本在子进程的bash内执行的。就像之前讲export一样,重点是当子进程完成后,子进程内的各项变量或操作将会结束,而不会传回到父亲进程。
实验:
执行了showname.sh之后,里面的变量在父进程的bash中不会存在。
利用source执行脚本
利用source执行脚本情况就和上面不一样了
showname.sh会在父进程中执行,因此各项操作都会在原本的bash内生效。
这也是为什么如果我不注销系统而要让某些写入~/.bashrc
的设置生效时,需要用source ~/.bashrc
而不是bash ~/.bashrc
。
判断式
利用test命令
使用test检测系统上面某些文件或相关属性
选项 | 含义 |
---|---|
-e | 该文件名是否存在 |
-f | 该文件名是否存在且是文件 |
-d | 该文件名是否存在且是目录 |
-r | 该文件名是否具有可读属性 |
-w | |
-x | |
test -z 字符串 | 判断是字符串是否为0,若字符串是空,返回true |
-a | and,两条件同时成立。比如test -r file -a -x file,则file同时有r和x才返回true |
-o | or,两条件任意一个成立。 |
应用:写一个脚本分析文件的属性:
判断符号[]
除了test还可以用[]来判断数据。比如想知道${HOME}是否为空,可以这样
这里注意中括号的两端都需要空格,目的是为了避免和通配符和正则表达式出现语法混淆
这里出现了too many arguments
。这是因为${name}
没有用双引号括起来,导致上面的判断式变成了这样yzq yyy == "yzq"
,等式左边有了两个数据,这就造成了错误。
所以应该这样"${name}" == "yzq"
。
所以要注意以下几点:
- 中括号[]内的每个组件都要用空格分隔
- 中括号内的变量最好都用双引号括起来
- 中括号内的常熟最好都用单引号或双引号括起来
中括号使用方法几乎和test一样,只是中括号比较常用在if判断里面
应用:
这里和test一样,也用了-o表示或。