Bash
shell是一种弱类型的编程语言
配置文件
profile:定义环境变量,运行程序或者脚本,只在用户登录时才会运行该配置文件
bashrc:设置本地变量,定义命令别名
登录式shell,配置文件及次序
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非登录式shell,配置文件及次序
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
linux变量
变量赋值:变量名=变量值
撤销变量:unset 变量名
引用变量:$变量名
bash变量类型
- 环境变量:作用域为当前shell进程及其子进程
- 查看环境变量
- printenv
- env
- export
- 查看环境变量
- 本地变量:作用域为整个bash进程
- 查看本地变量
- set
- 查看本地变量
- 特殊变量
$?- 返回上一个命令执行状态返回值,值为0代表程序正确执行,非零都为错误执行
$#- 返回传入参数个数
$@- 返回参数内容,多个参数返回列表
$*- 返回所有参数
$RANDOM- 生成随机数
$$- 返回当前进程id
$!- 后台运行的最后一个进程的id号
- 位置变量
$0- 脚本名,带上所有引用路径
$1-9- 参数
- 注意,
$10不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数
shift命令,踢出参数
数组
- 声明数组
declare -a 数组名
- 数组赋值
- 数组名={元素1 元素2 ……}
- human={jack tom divint3}
- 数组名={[元素位置1]=元素值1 [元素位置]2=元素2 ……}
- human={[0]=jack [1]=tom [6]=Divint3}
- 数组名={元素1 元素2 ……}
管道与重定向
输入输出重定向
- 标准输入:代码为 0 ;或称为 stdin ;使用的方式为 <
- 标准输出:代码为 1 ;或称为 stdout;使用的方式为 1>
- 错误输出:代码为 2 ;或称为 stderr;使用的方式为 2>
输入重定向,一般输入到一个程序中:< 输出通定向:> 追加输出重定向:>> 在此处生成文档 Here Document:<<
例如: 不指定输出位置,则输出到屏幕:
1 | root@Divint3:~# cat << EOF |
指定输出位置,则输出到指定位置:
1 | root@Divint3:~# cat << EOF >> doc.txt |
bash中使用><|时 -用作占位符
set -C:阻止覆盖重定向 强制覆盖输出 >| set +C:取消阻止覆盖重定向重定向
tee: 既能保证输出可以输出到标准输出(屏幕),也能保证输出到文件中.
1 | root@Divint3:~# echo "echo" | tee /tmp/a |
重定向所有输出(标准输出以及标准错误输出)
ls > /dev/null 2>&1
bash编程
流程控制
分支结构
多行if结构
1 | if condition |
单行if结构
1 | if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi |
if else
1 | if condition |
if elif else
1 | if condition1 |
case
1 | case 值 in |
循环结构
for循环
1 | for var in item1 item2 ...; |
while循环
1 | while condition; |
until循环
1 | until condition |
跳出循环
continue:跳出本次循环进行下一次循环
break:跳出循环
基本运算符
布尔运算符
| 运算符 | 说明 |
|---|---|
| ! | 非运算 |
| -o | 或运算 |
| -a | 与运算 |
关系运算符
| 运算符 | 说明 |
|---|---|
| -eq | 相等返回true |
| -ne | 不相等返回true |
| -gt | 大于返回true |
| -lt | 小于返回true |
| -ge | 大于等于返回true |
| -le | 小于等于返回true |
字符串运算符
| 运算符 | 说明 |
|---|---|
| = | 字符串相等返回true |
| != | 字符串不相等返回true |
| -z | 字符串长度为0返回true |
| -n | 字符串长度不为0返回true |
| $ | 字符串不为空返回true |
文件测试运算符
| 运算符 | 说明 |
|---|---|
| -b | 是块设备文件返回true |
| -c | 是字符设备文件返回true |
| -d | 是文件夹返回true |
| -f | 是普通文件返回true |
| -g | 设置了sgid位返回true |
| -k | 设置了粘滞位返回true |
| -p | 是有名管道文件返回true |
| -u | 设置了suid位返回true |
| -r | 是可读文件返回true |
| -w | 是可写文件返回true |
| -x | 是可执行文件返回true |
| -s | 是空文件返回true |
| -e | 文件/文件夹存在返回true |
| -L | 文件存在链接返回true |
函数
1 | <function> funname(){ |
bash检查语法以及查看执行过程
1 | bash -n test.bash #查看bash是否存在语法错误 |
信号
1 | 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP |
Ctrl+c:sigint=kill -2
trap信号捕捉
trap是不能捕捉sigkill信号的,kill -9 发送sigkill信号,程序必定停止运行
read读变量
脚本使用选项
getopts
内置变量$OPTARG,用于接收选项参数
选项索引$OPTIND
获得最后的参数shift ${$OPTIND-1}

