1. shell作为应用程序
交互式地解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能称之为shell命令解析器
shell是用户和Linux内核之间的接口程序
shell本质是对内核起到保护作用,只有shell能够识别的命令才能够直接操作内核来控制硬件
2. shell作为一门语言
它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支完成类似于windows下批处理操作,简化我们对系统的管理与应用程序的部署称之为shell脚本.
shell脚本是shell命令的有序集合
shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行
3. shell脚本主要作用
帮助开发人员或系统管理员将复杂而又反复的操作放在一个文件中,通过简单的一步执行操作完成相应任务,从而解放他们的负担
4. shell脚本的执行
shell脚本的代码编写流程
第一步:指定shell脚本文件,一般以.sh作为后缀名,也可以不加,例如:test.sh
第二步:编写代码
#!/bin/bash
# #!用于指定当前脚本文件的shell解释器的类型,如果不写,则用默认的shel l
#shell脚本是shell命令的有序集合,代码的构成就是命令
ls
pwd
echo "hello world"
第三步:修改文件权限
chmod +x test.sh
第四步:执行脚本文件
./test.sh
或者 bash test.sh (这种方式不需要修改文件权限)
执行结果
5. 变量
5.1 自定义变量
代码展示:
#!/bin/bash
#定义变量 4 #shell脚本中没有数据类型可言,所以定义变量时不需要加数据类型 5 #shell脚本中,赋值操作时不能在等号两边加空格
#NUM = 100 #错误
NUM=100
#引用变量 10 # $变量名 取一个变量的值
i=$NUM
#显示变量
echo $NUM
echo $i
#清除变量
unset NUM
echo "*************"
echo $NUM
#使用read从终端读取数据保存在变量中
read str
echo "str = $str"
#使用readonly创建一个只读的变量
readonly n=999
echo "n = $n"
#指定变量初始化后不能再次修改变量的值,只能使用
#n=666
#echo "n = $n"
5.2 环境变量
shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,我们在shell中可以直接使用$name引用
定义:一般在~/.bashrc或/etc/profile文件中(系统自动调用的脚本)使用export设置,允许用户后来更改
设置环境变量:
方法1:临时设置在终端执行命令
MYVAL=999
export MYVAL
方法2:永久设置
需要在配置文件(~/.bashrc或/etc/profile)中进行设置即可,设置完毕后需要通过 source命令配置文件立即生效
使用环境变量,一般环境变量类似c语言中的全局变量,可以再shell脚本文件中任意使用
代码展示:
#!/bin/bash
echo "You are welcome to use bash"
echo "Current work dirctory is $PWD"
echo "the host name is $HOSTNAME"
echo "your home dir $HOME"
echo "Your shell is $SHELL"
echo "user env val is $MYVAL1"
执行结果:
5.3 预设变量
- $#:传给shell脚本参数的数量
- $*:传给shell脚本参数的内容
- $1、$2、$3、...、$9:运行脚本时传递给其的参数,用空格隔开
- $?:命令执行后返回的状态
- "$?"用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)。
- $0:当前执行的进程名
- $$:当前进程的进程号
- "$$"变量 常见的用途是用作临时文件的名字以保证临时文件不会重复
代码展示:
#! /bin/bash
#位置变量$0 ‐ $9 保存从终端输入的每一个参数
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$5 = $5"
echo "\$6 = $6"
echo "\$7 = $7"
echo "\$8 = $8"