如何 shell 编程?
基础的 shell 编程知识, 还有一些对应的小例子.
shell 简介
shelle十一个命令行解释器,为用户提供了向linux内核
发送请求以便运行程序的界面系统程序,用户可以用shell
来启动、挂起、停止甚至编写程序。
1 | graph LR |
格式要求
以#!/bin/bash
开头,指定 bash 解释器; 这里指定了bash
权限要求
执行 shell 脚本,一般给脚本添加执行权限
,两种增加权限方式:
1 | sudo chmod +x xxx.sh |
执行方式
两种执行方式:
1 | ./xxx.sh |
注释方法
1 | # 单行注释 |
shell 变量
系统变量
系统预先定义的,可以直接使用,如:$HOME
, $PWD
, $bash
, $USER
等 使用 set
命令可以查看当前 bash 中所有变量
自定义变量
通过 变量名=值
定义变量, 使用 unset
可以撤销变量; readonly
声明静态变量,该类型不可 unset
。例子:
1 |
|
- 变量名可由字母、数字、下划线组成,不能以
数字开头
=
两侧不能有空格- 变量一般使用
大写
方式- 调用变量时,需要使用
$
符号或者${}
可以将执行指令的结果
赋值给变量,例子:
1 |
|
- 两种方式,推荐使用第二种
RESULT=$(ls -l /home)
位置参数变量
我们可以获取命令行输入的参数, Sn
: n
是数字,$0
表示命令本身,从$1~$9
, 表述命令行输入的第一到第九个参数,第十个及以上要使用{}
, 如 ${10}
S*
: 所有参数,但看作一个整体 S@
: 所有参数,但区分个体 S#
: 所有参数个数
预定义变量
bash 设计者已经定义好的,可以直接使用, $$
: 当前进程号(PID) $!
: 后台运行的最后一个进程号(PID) $?
: 最后一次执行命令的返回状态, 0
表示正确执行,否则错误执行
shell 运算
操作:加、减、乘、除、模; 运算符号:+
、-
、*
、/
、%
形式:$((运算式))
、$[运算式]
、expr a - b
, 例子:
1 |
|
expr
方式中运算符两侧要有空格,整个元算式需要反引号
包裹- 推荐使用
$[运算式]
方式
读取控制台输入
基本语法:read 选项 参数
-p
指定读取时的提示符 -t
指定读取等待时间,时间内未输入则不再等待输入
1 |
|
shell 数组
一对括号表示是数组,数组元素用空格
符号分割开。如:a=(1 2 3 4 5)
获取:用$\{\#数组名\[@或\*\]\}
可以得到数组长度, 用${数组名[下标]}
可以得到指定下标的值,下标是从 0 开始; 用${数组名[@或*]}
可以得到整个数组内容
1 | ###### 获取 ###### |
赋值:直接通过 数组名[下标]=值
就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素
1 | ###### 赋值 ###### |
删除:unset 数组[下标]
可以清除相应的元素,不带下标,清除整个数据。
1 | ###### 删除 ###### |
截取:截取数组 ${数组名[@或*]:起始位置:长度}
返回字符串,中间用“空格”分开; 如果加上”()”,将得到切片数组。
1 | ###### 截取 ###### |
替换:${数组名[@或*]/查找字符/替换字符}
该操作不会改变原先数组内容。
1 | ###### 替换 ###### |
条件判断
形式 [ condition ]
条件语句与
[]
之间要有空格,[]
内是空返回false
常用判断条件
字符串类型 | |
= | 等于 |
!= | 不等于 |
-z 字符串 | 字符串的长度为零则为真 |
-n 字符串 | 字符串的长度不为零则为真 |
整数类型 | |
-lt | 小于 |
-le | 小于等于 |
-gt | 大于 |
-ge | 大于等于 |
-eq | 等于 |
-ne | 不等于 |
文件权限 | |
-r | 有可读权限 |
-w | 有可写权限 |
-x | 有可执行权限 |
文件类型 | |
-e | 是否文件存在 |
-f | 是否是普通文件 |
-d | 是否是目录 |
流程控制
if 判断
1 | if [ condition ];then |
1 | if [ condition ] |
推荐使用第二种
例子:
1 |
|
case 语句
1 | case $variable_name in |
例子:
1 |
|
for 循环
1 | for 变量 in value1 value2 value3 ... |
1 | for ((初始值;循环控制条件;变量变化)) |
例子:
1 |
|
1 |
|
while 循环
1 | while [ condition] |
例子:
1 |
|
函数
系统函数
basename
自定义函数
1 | function func_name(){ |
function
关键字可以不写,但推荐写; 可以没有return
例子:
1 |
|
暂时这么多笔记