shell介绍
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写- -些程序。
执行方式
脚本格式要求
- 脚本以 #!/bin/bash开头
- 脚本需要有可执行权限
脚本执行方式
- (输入脚本的绝对路径或相对路径) 说明:首先要赋予XXX.sh脚本的+x权限,再执行脚本 比如./hello.sh 或者使用绝对径。
- (sh+脚本) 说明:不用赋予脚本+x权限,直接执行即可。 比如sh hello.sh, 也可以使用绝对路径
shell变量
变量介绍
- Linux Shell中的变量分为,系统变量和用户自定义变量。
- 系统变量: H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER等等,比如: echo $HOME 等等…
- 显示当前shell中所有变量:set
变量定义
- 定义变量: 变量名=值
- 撤销变量: unset变量
- 声明静态变量: readonly变量, 注意:不能unset
定义变量的规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
- 等号两侧不能有空格
- 变量名称一 般习惯为大写,这是一个规范, 我们遵守即可 V将命令的返回值赋给变量
- A='date反引号,运行里面的命令,并把结果返回给变量A
- A=$(date) 等价于反引号
定义环境变量
- export 变量名=变量值( 功能描述:将shell变量输出为环境变量/全局变量)
- source 配置文件 (功能描述:让修改后的配置信息立即生效)
- echo $变量名 (功能描述:查询环境变量的值)
位置参数变量
符号 | 说明 |
---|---|
$n | n为数字,$0 代表命令本身,$1- 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数, 十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10} |
$* | 代表命令行中所有的参数,$*把所有的参数看成-一个整体 |
$@ | 代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# | 代表命令行中所有参数的个数 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0 (具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。 |
表达式运算
运算符
- “ ( (运算式) ) ”或“ ((运算式))”或“ ((运算式))”或“[运算式]”或者 expr m + n
- 注意expr运算符间要有空格,如果希望将 expr r的结果赋给某个变量,使用“
- expr m - n,减法
- expr *, /, % 乘,除,取余
条件判断
- [ condition ] (注意condition前后要有空格)
- 非空返回true,可使用$?验证(0为true, >1为false)
常用判断条件,字符串比较,两个整数的比较
- = 等于
- -It 小于
- -le 小于等于little equal
- -eq 等于.
- -gt 大于
- -ge 大于等于
- -ne 不等于
按照文件权限进行判断
- -R 有读的权限
- -W 有写的权限
- -X 有执行的权限
按照文件类型进行判断
- -f 文件存在并且是一个常规的文件
- -e 文件存在
- -d 文件存在并是-一个目录
流程控制
if多分支
if [ 条件判断式 ]
then
代码
fi
或者, 多分支
if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
fi
case语句
case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1;;
“值2”)
如果变量的值等于值2,则执行程序2;;
*)
如果变量的值都不是以上的值,则执行此程序;;
esac
for语句
- 语法一
for 变量 in 值1 值2 值3…
do
程序/代码
done - 语法二
for ((初始值;循环控制条件;变量变化))
do
程序/代码
done
while语句
while [ 条件判断式 ]
do
程序/代码
done
read读取控制台输入
read (选项) (参数)
选项:
- -p: 指定读取值时的提示符;
- -t: 指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。
函数
shell编程和其它编程语言-样,有系统函数,也可以自定义函数。系统函数中,这里就介绍两个。
系统函数
basename 基本语法
功能: 返回完整路径最后1的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffx] ( 功能描述: basename 命令会删掉所有的前缀包括最后一个(“/)字符,然后将字符串显示出来。
自定义函数
[ function ] funname[(]
{
Action;
[returm int;]
}
调用直接写函数名: funname [值]