shell是一个命令解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统程序,可以用shell来启动、挂起、停止、编写一些程序。
快速入门
-
脚本格式要求
- 脚本以#!/bin/bash开头
- 脚本需要有可执行权限
-
编写一个shell脚本输出hello world
-
新建一个myShell.sh脚本
-
编辑脚本内容
-
赋予脚本执行权限
-
-
脚本的常用执行方式
-
输入脚本的绝对路径或相对路径
-
sh+脚本
说明:这种方式可以不用赋予脚本可执行权限,直接运行即可
-
shell变量
shell变量分为,系统变量和用户自定义变量。系统变量: H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER等。
系统变量
-
输出系统变量
注:使用$引用变量
-
显示shell中的所有变量:set
用户变量
-
语法
- 定义变量:变量名=变量值
- 撤销变量:unset 变量
- 声明静态变量:readonly 变量。静态变量不能unset
-
定义变量规则
- 变量名称可由字母、数字和下划线组成,数字不能开头
- 等号两侧不能由空格
- 变量名一般习惯为大写
-
将命令的返回值赋值给变量
- A=`ls -la` 反引号,运行引号里面的命令,并将结果返回给变量A
- A=$(ls -la)
-
案例一:声明用户变量
-
案例二:静态变量不能unset
-
案例三:引用命令运行结果
设置环境变量
-
语法
- export 变量名=变量值(将shell变量输出为环境变量)
- source 配置文件(使修改后的配置文件生效)
- echo $变量名(查询环境变量的值)
-
案例
位置参数变量
当执行shell脚本时,希望获取到命令行的参数,就可以使用位置参数变量。比如,./myShell.sh 100 200,这个shell命令,可以在shell脚本中获取到参数信息。
-
语法
$n:n为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 第 十 个 以 上 的 参 数 , 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数,第十个以上的参数,需要用大括号包含,如 9代表第一到第九个参数,第十个以上的参数,需要用大括号包含,如(10)
$*:代表命令中的所有参数,把所有参数看成一个整体
$@:代表命令中的所有参数,把每个参数区分对待
$#:代表命令中所有参数的个数
-
案例
预定义变量
shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
-
语法
$$:表示当前进程的进程号(PID)
$!:表示后台运行的最后一个进程的进程号(PID)
$?:表示最后一次执行的命令的返回状态,0代表上一个命令正常执行,非0则代表上一个命令执行不正确
-
案例
运算符
-
语法
-
( ( 运 算 符 ) ) 或 ((运算符))或 ((运算符))或[运算符]
-
expr m + n
注意:expr运算符间要有空格。
-
expr /*,/,% 乘,除,取余,乘要“/”转义
-
-
案例
条件判断
-
基本语法
[ condition ] (注意condition前后又空格)
#非空返回true,可使用$?验证(0-true,>1-false)
-
判断语句
-
两个整数判断
=:字符串比较
-lt:小于
-le:小于等于
-eq:等于
-gt:大于
-ge:大于等于
-ne:不等于
-
按照文件权限判断
-r 文件:有读的权限
-w 文件:有写的权限
-x 文件:有执行权限
-
按照文件类型判断
-e 文件:判断文件是否存在
-d 文件:文件存在且是一个目录
-
-
案例
流程控制
if
-
语法形式1
if [ 条件判断 ];then 程序 fi
-
语法形式2
if [ 条件判断 ] then 程序 elif [ 条件判断 ] then 程序 fi
-
注意:[ 条件表达式 ],中括号和条件表达式之间必须有空格
-
案例
case
-
语法
case $变量名 in "value1") 如果变量值等于value1则执行 ;; "value2") 如果变量值等于value1则执行 ;; *) 如果变量值都不等于以上的值,则执行此程序 ;; esac
-
实例
for循环
-
语法1
for 变量 in 值1 值2 值3 ... do 程序 done
-
语法2
for((初始值;循环控制条件;更新变量)) do 程序 done
-
实例
while循环
-
语法
while [ 条件表达式 ] do 程序 done
-
实例
read读取控制台输入
-
语法
read [选项] [参数]
-
选项
-p:指定读取时的提示符
-t:指定读取等待时间(秒),如果没有在指定时间内输入,就不再等待
-
参数
变量:指定读取值的变量名
-
-
实例
函数
shell既有系统函数,也可以自定义函数。
系统函数
-
basename
- basename [path] [suffix] 功能:返回完整路径最后/的部分,常用于获取文件名
- basename [string] [suffix] 功能:删掉所有的前缀包括最后一个“/”字符,然后将字符串显示出来
选项:suffix为后缀,如果suffix指定了,basename会将pathname或string中的suffix去掉。
-
实例
-
dirname
dirname 文件绝对路径
功能:返回完整路径最后/的前面部分,常用于返回文件路劲
-
实例
自定义函数
-
语法
function funName() { 函数体; [return int;] }
调用直接写函数名:funname[值]
-
实例
]
-
dirname
dirname 文件绝对路径
功能:返回完整路径最后/的前面部分,常用于返回文件路劲
-
实例
[外链图片转存中…(img-usOvTRhb-1612708535084)]
自定义函数
-
语法
function funName() { 函数体; [return int;] }
调用直接写函数名:funname[值]
-
实例