shell脚本
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
**************
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
**************
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
- ……
常见的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
shell脚本的扩展名并不影响脚本执行
一般的开始:
#!/bin/bash
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
运行shell脚本有两种方式:
一种是将自己所写的shell脚本具有执行权限
chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本
另一种就是直接使用解释器将脚本作为参数执行
/bin/sh test.sh
Shell 变量
定义变量时,变量名不加美元符号,变量名和等号之间不能有空格,变量名的命名须遵循如下规则:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
变量的使用就是直接美元符号+变量名即可,也可以写成美元符号+{变量名},这样可以帮助解释器识别变量的边界。
另外只有使用变量的适合才加美元符号,其他地方如再次赋值都不能加美元符号。
只读变量,使用readonly命令可以让变量变为只读。
删除变量,使用 unset 命令可以删除变量。变量被删除后不能再次使用。unset 命令不能删除只读变量。
变量类型
运行shell时,会同时存在三种变量:
- 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
Shell 字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
- 双引号里可以有变量
- 双引号里可以出现转义字符
Shell 传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……其中 $0 为执行的文件名。
Shell echo命令
Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。
Shell 流程控制
在sh/bash里可不能这么写,如果else分支没有语句执行,就不要写这个else。 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。
![](https://img2020.cnblogs.com/blog/1268977/202005/1268977-20200530234646483-25181224.png)
![](https://img2020.cnblogs.com/blog/1268977/202005/1268977-20200530234702436-1745859373.png)
![](https://img2020.cnblogs.com/blog/1268977/202005/1268977-20200530234716926-1989840849.png)
![](https://img2020.cnblogs.com/blog/1268977/202005/1268977-20200530234744025-1670744174.png)
![](https://img2020.cnblogs.com/blog/1268977/202005/1268977-20200530234920761-1046792063.png)
![](https://img2020.cnblogs.com/blog/1268977/202005/1268977-20200530234952220-959633979.png)
![](https://img2020.cnblogs.com/blog/1268977/202005/1268977-20200530235058170-845016883.png)
![](https://img2020.cnblogs.com/blog/1268977/202005/1268977-20200530235113996-516705016.png)
还有很多。。。
Shell 函数
函数返回值在调用该函数后通过 $? 来获得。
Shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。