Linux shell(1)-构建基本脚本
1. 创建shell脚本文件
- 创建shell脚本文件, 实例命令如下:
1 |
|
- 在脚本的第一行中写入该命令,感叹号!后面的是使用的shell的路径,上面命令中使用的就是 bash shell,如果需要使用其他shell,如zsh,可以写其他shell的路径
1.1 加入环境变量
- 可以将自己创建的shell脚本文件加入环境变量中,详情见笔记手札 《Linux环境变量》
1.2 执行shell脚本
- 执行shell脚本首先需要给shell脚本赋予执行权限,如果没有的话,当然一个脚本被创建时一般都是没有执行权限的,命令如下:
1 |
|
2. 显示消息
- 使用 echo 显示输出的文本
1 |
|
- 当运行这个脚本时,它会产生如下输出。
1 |
|
- 一般shell脚本中的命令与文本是不同行输出的,如果想让文本与命令在同一行输入,可以使用echo的-n参数,修改上述脚本:
1 |
|
- 你需要在字符串的两侧使用引号,保证要显示的字符串尾部有一个空格。命令输出将会在紧接着字符串结束的地方出现。现在的输出会是这样:
1 |
|
3. 使用变量
3.1 环境变量
- 在使用环境变量的时候,可以使用美元符号 $ 引用环境变量,但是在给环境变量赋值的时候不需要使用美元符号,如果需要显示美元符号,可以在美元符号前面使用反斜杠来转置
3.2 用户变量
- 除了环境变量外,shell脚本还允许我们自定义用户变量,用户变量区分大小写,并且在对用户变量赋值的时候等于号 = 两边不能够有空格
4. 命令替换
使用反引号或 $() 对命令进行替换
要么用一对反引号把整个命令行命令围起来:
testing='date'
要么使用$()格式:
testing=$(date)
shell会运行命令替换符号中的命令,并将其输出赋给变量testing。注意,赋值等号和命令替换字符之间没有空格。这里有个使用普通的shell命令输出创建变量的例子。
1 |
|
- 变量testing获得了date命令的输出,然后使用echo语句显示出它的值。运行这个shell脚本生成如下输出。
1 |
|
- 命令替换会创建一个子shell来运行对应的命令, 在命令行提示符下使用路径./运行命令的话,也会创建出子shell, 如果你使用的是内建的shell命令,并不会涉及子shell。
5. 重定向输入和输出
5.1 重定向输出
- 如果输出文件已经存在了,重定向操作符 > 会用新的文件数据覆盖已有文件。
- 有时,你可能并不想覆盖文件原有内容,而是想要将命令的输出追加到已有文件中,比如你正 在创建一个记录系统上某个操作的日志文件。在这种情况下,可以用双大于号(>>)来追加数据。
5.2 重定向输入
1 |
|
6. 执行数学运算
6.1 使用方括号
- 在bash中,在将一个数学运算结果赋给某个变量时,可以用美元符和 方括号($[ operation ])将数学表达式围起来。
1 |
|
注意在使用方括号来计算公式时,不用担心shell会误解乘号或其他符号。shell知道它不是通配符,因为它在方括号内。
bash shell数学运算符只支持整数运算。
z shell(zsh)提供了完整的浮点数算术操作。如果需要在shell脚本中进行浮点数运算,可 以考虑看看z shell
6.2 expr 命令 (不使用)
最开始,Bourne shell提供了一个特别的命令用来处理数学表达式。expr命令允许在命令行 上处理数学表达式,但是特别笨拙。
要解决这个问题,对于那些容易被shell错误解释的字符,在它们传入expr命令之前,需要使 用shell的转义字符(反斜线)将其标出来。
$ expr 5 \* 2
7. 退出脚本
- 正确退出脚本时的状态码是0,不正确则为其他数字,查看状态码的命令是
echo $?
- 下面是状态码一览表
自定义退出状态码
- 使用exit,可以在脚本的末尾自定义退出状态码
1 |
|
- 当查看脚本的退出码时,你会得到作为参数传给exit命令的值。
1 |
|
参考文献
Linux shell(1)-构建基本脚本
https://oldstory.cn/2022/01/06/linux_shell_1_gou_jian_ji_ben_jiao_ben/