shell编程
bash编程
- 创建shell脚本文件
- 使用vim(或其他文本编辑器)创建脚本文件(一般以.sh结尾)
- 在shell脚本中可以运行所有linux命令
- shebang
- 在bash的脚本中开头第一行要写shebang
- 指定以bash运行该文件
#! /bin/bash
- 给shell脚本添加运行权限
- chmod +x shell脚本文件名
- 运行shell脚本
- 输入shell脚本的文件路径
- 调试模式
- bash -x shell脚本文件名
- 调试模式下会显示每条执行的命令
- 环境路径变量——$PATH
- 显示当前系统的$PATH所处的文件夹:echo $PATH
- 将shell脚本文件复制到环境变量文件夹中就可以直接输入文件名运行脚本(不推荐随意更改环境变量文件夹)
- 变量
- 在Bash中,所有的变量都是字符串
变量名=变量值
- 不可以在等号两边增加空格,否则变量名会被孤立,导致系统判断为linux命令
- echo
- 用于输出变量
echo $变量名
- -e 参数解析特殊字符
- 单引号与双引号
- 单双引号的规则与php大致相同
- 反引号
- 使shell脚本执行反引号之中的内容
- read
- read 变量名 可以等待终端输入值赋值给变量
- 如同c语言的scanf
- read命令可以一次性给多个变量赋值,变量名之间用空格隔开
- read的-p参数可以在用户输入前输出提示信息
- read的-n参数可以限制用户输入的值的长度
- read的-t参数可以限制用户的输入时间
- read的-s参数可以在读取输入时隐藏用户的输入内容
read -p '请输入:' -n 长度 -t 时间 -s 变量名
- 数学运算
- let命令(linux中的命令)
- bash无法自行进行数学运算,需要使用let命令
- 例:
let 'a=5' let 'b=2' ley 'c=a+b'
- 此时的c为7
- 可以使用的运算符:
- 加法 +
- 减法 -
- 乘法 *
- 除法 /
- 幂(乘方) **
- 余(整数除法的余数) %
- bc命令
- 用于进行小数运算
- 使用方法:菜鸟教程
- 环境变量
- env输出所有的环境变量
- HOME环境变量——当前用户的家目录
- SHELL——默认的环境变量
- export命令
- 设置环境变量
export 环境变量名=值
- 参数变量
- 脚本文件路径 参数1 参数2 参数3
- 变量
- $#——参数的数目
- $0——被运行的脚本的名称
- $N——第N个参数
- shift命令用来挪移参数,以便依次处理
- 数组
变量名=['变量值' '变量值' '变量值' ...]
- 使用方法与一般的编程语言相同
- * 指代所有数组元素
echo array[*]
输出数组中的所有元素-
shell的条件语句
- if
- 格式:
if [ 条件测试 ]; then 执行代码 fi
- 注意:条件和 [ ] 之间必须用空格隔开,要以 fi 结尾
- shell中的等于
- 使用一个 = (也可以使用==)
- else
- 用法与一般的编程语言大致相同
- elif
- 等同于一般编程语言中的else if
-
条件测试
- 字符串测试
- = 判断是否相等
- != 判断是否不等
- -z 判断是否为空
- -n 判断是否不为空
- 数字测试
- -eq 判断是否相等
- -ne 判断是否不等
- -lt 判断是否小于
- -le 判断是否小于或等于
- -gt 判断是否大于
- -ge 判断是否大于或等于
- 文件测试
- -e 判断文件是否存在
- -d 判断文件是否是一个目录
- -f 判断文件是否是一个文件
- -L 判断文件是否是一个符号链接文件
- -r 判断文件是否可读
- -w 判断文件是否科协
- -x 判断文件是否可以执行
- -nt 判断前一个文件是否比后一个文件更新
- -ot 判断前一个文件是否比后一个文件更旧
- 多个条件之间的连用
- && 和 ||
[ 条件字段 ] && [ 条件字段 ]
[ 条件字段 ] || [ 条件字段 ]
- 与一般的编程语言用法相同
- !
- 反转字段条件
[ ! 条件字段 ]
- case
- 类似一般编程语言中的switch语句
- 注意:要以esac结尾
- 可以在case语句中的条件之间使用或的判断
- 使用 | 分隔
-
循环语句
- while循环
while [ 条件测试 ] do 执行代码 done
- 注意do于条件语句同行时,条件语句后加 ;
- until循环
- 如果条件为假时一直循环,直到满足条件结束
- for循环
for 变量名 in 变量组 do 执行代码 done
- 变量组可以于Linux命令相搭配
- 例如:
for file in 'ls' do echo $file done
- 会输出所有遍历出的文件
- seq
for 变量名 in ’seq 起始值 跨度(可选) 结束值' do 执行代码 done
-
shell的函数
- 定义方式
function 函数名 { 函数体 }
函数名() { 函数体 }
- 返回值
- Shell的函数可以返回一个状态
- Shell函数要返回状态,也用return这个关键字
- 返回0表示顺利,非0值表示有错误
- 向shell函数传参的方式,并获得返回值的方法
变量 = $(函数名 参数)
- 注意:shell的函数名后的 () 不可以加任何参数。
- 变量作用范围
- 默认为全局
- 定义局部变量,需要使用local关键字
- command
- 可以通过对函数使用command实现对命令的重载
命令名 () { command 重载的命令 }
- 注意:如果没有添加command关键字会陷入死循环