Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。 **shell脚本格式要求:** * 脚本以`#!/bin/bash` 开头 * 脚本需要有可执行权限 ## 一个简单的Shell脚本 ```shell #!/bin/bash # 定义变量(注意=号两端不能有空格) city=qingdao echo $city name='张三' echo $name job="开发" echo $job # 使用变量,推荐加花括号{} echo "我是一名${job}工程师" # 单引号和双引号的区别 echo 'My name is ${name}' # 输出 My name is ${name} echo "My name is ${name}" # 输出 My name is 张三 ``` ## 变量 ### 自定义变量 Shell 中的变量分为系统变量和用户自定义变量。系统变量:\$HOME、\$PWD、\$SHELL、\$USER 等等,比如: echo $HOME 等等... 显示当前 shell 中所有变量:set * 定义变量:变量名=值 * 撤销变量:unset 变量 * 声明静态变量:readonly 变量,注意:不能 unset **定义变量的规则:** 1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。 2. **等号两侧不能有空格** 3. 变量名称一般习惯为大写, 这是一个规范 **将命令的返回值赋给变量:** ```shell #反引号里面的命令,会把运行结果赋值给变量A A=`date` #等价于反引号 A=$(date) ``` ### 设置环境变量 export 变量名=变量值 (将 shell 变量输出为环境变量/全局变量) source 配置文件(让修改后的配置信息立即生效) echo $变量名(查询环境变量的值) ## 输入参数 当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。一个简单的例子 simple.sh ```shell #!/bin/bash v1=$1 v2=$2 echo ${v1} echo ${v2} echo $3 ``` 执行 `./simple.sh hello world again`,输出 ``` hello world again ``` \$n (n 为数字,\$0 代表命令本身,\$1-\$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}) \$\# (代表命令行中所有参数的个数) \$\* (代表命令行中所有的参数,\$\*把所有的参数看成一个整体) \$\@ (代表命令行中所有的参数,不过\$@把每个参数区分对待) ```shell # $* 和 $@ 的区别: # 此时它俩没有区别 for var in $* do echo $var done echo $* echo $@ # ``` ## 条件判断 一个简单的例子 simple.sh ```shell #!/bin/bash v1=$1 if [$v1 -eq '']; then echo '输入为空' fi ``` 执行 `./simple.sh`,输出结果: ``` 输入为空 ``` **多条件分支** ```shell #!/bin/bash v1=$1 ## 中括号和内部表达式必须有空格分隔 if [ $v1 -eq '' ]; then echo "输入为空" else echo "输入${v1}" fi ```