一,Bash编程基础
1.1 变量
1.1.1 变量定义规则
- 变量名区分大小写,a和A为两个不同的变量。
- 变量名可以使用大小写字母混编的形式进行编写。
- 变量名与值之间的=两侧都不能有空格。
- 在读取或打印变量时,需使用$+变量名。
- 变量可以写在Bash脚本中的任何地方,在运行时,Bash会自动将其替换为变量值。
1.1.2 Bash 数据类型
- 在 Bash 中声明变量后赋值,它会自动判断数据类型,不必在声明的同时去定义变量的数据类型。
1.1.3 变量类型
- 系统定义的变量
- 通常是以大写字母形式存在
- 如 BASH、SHELL等
- 用户定义的变量
- 多数以小写字母参与命名
- 但不具有大小写强制性规定
1.1.4 定义与使用
- 语法: Variable_name=value
- 定义变量名:letter_name=“abc”
- 打印变量:echo $letter_name
- 只读变量:a=“123” readonly a (只读变量不可修改,不可删除,关闭窗口后再打开变量不生效)
- 删除变量:unset Variable_name
1.1.5 字符串拼接
- 基本语法:
str3="${str1}${str2}
1.2 引号
- 输入的内容为简单的字符串或文本时,单引号和双引号的作用没有任何区别
- 输出一个已定义的变量,则需要使用双引号
1.3 数组
- 数组可以定义为相似类型元素的集合,在bash中数组不必是相似类型元素的集合
- 基本语法:array_name=(value0 value1 value 2 value3)
- 取数组:value = ${array_name[n]}
- 单独赋值:array_name[0]=value0
- 取出所有元素:${arr[@]} 或者 ${arr[*]}
- 查看数组长度:${#arr[@]}
- 输出索引:${!arr[@]}
1.4 控制语句
1.4.1 if语句
- 基本语法:if [ expression_1 ] && [ expression_2 ]; then statements fi
- 需要注意空格,不然很容易写错
- if [ $a -gt $b ]; then echo “大于”; elif [ $a -lt $b ]; then echo “小于”; elif [ $a -eq $b ]; then echo “等于”; fi
- if [[ $a > $b ]]; then echo “大于”; elif [[ $a < $b ]]; then echo “小于”; elif [[ $a = $b ]]; then echo “等于”; fi
1.4.2 for循环
- 基本语法:for variable in list do commands done
1.4.3 while循环
- 基本语法:while [ expression ]; do commands; multiple commands; done
- 循环读取文件内容并输出
-
read命令:读取整行输入,每行末尾的换行符不被读入
二,Bash脚本编写
2.1 read命令
-
read 命令是用于从终端或者文件中读取输入的内部命令
-
格式
read <variable_name>
-
read 常用参数
- -p 命令行选项在同一行上输入
- -s 静默输入
- -a 对数组进行多个输入
*$REPLY 默认参数
-
read支持算术运算
运算符 描述 运算示例 + 加法 $((7+2)) ,打印输出 9 - 减法 $((7-2)) ,打印输出 5 * 乘法 $((7*2)) ,打印输出 14 / 除法 $((18/2)) ,打印输出 9 ** 求幂 $((10**2)) ,打印输出 100 % 模 $((11%3)) ,打印输出 2 += 常量递增变量,结果存储回变量 x=7;let”x += 7”;echo $x ,打印输出 9 -= 常量递减变量,结果存储回变量 x=7;let”x -= 2”;echo $x ,打印输出 5 *= 变量乘以常量,结果存储回变量 x=7;let”x *= 2”;echo $x ,打印输出 14 /= 变量除以常量,结果存储回变量 x=18;let”x /= 2”;echo $x ,打印输出 9 %= 变量除以常量的余数,结果存储回变量 x=11;let”x %= 3”;echo $x ,打印输出 2 -
支持使用关系运算符
运算符 描述 运算示例 = 赋值 a=$b ,把变量b的值赋给a == 等于 [ $a == $b ] 相等则返回true != 不相等 [ $a != $b ]不等则返回true -
关系运算符列表
运算符 描述 运算示例 -eq 检查两个数字是否相等 1 -eq 1 ,返回 true -ne 检查两个数字是否不相等 1 -ne 2 ,返回 true -gt 检查左边数是否大于右边数 2 -gt 1 ,返回 true -lt 检查左边数是否小于右边数 1 -gt 2 ,返回 true -ge 检查左边数是否大于等于右边数 2 -ge 1 ,返回 true -le 检查左边数是否小于等于右边数 1 -le 2 ,返回 true -
算术运算符
-
双括号
-
反引号:反引号要与expr(通用表达式求值器)执行算术扩展。
-
let:
let "Num3 = $(( Num1 + Num2 ))"
2.2 脚本创建
- 新建一个test.sh文件
- 编辑文件内容
#!/bin/bash
echo "Hello World"
-
Bash执行
- chmod +x bash_script.sh (添加执行权限)
- ./bash_script.sh (启动脚本)
-
多行注释
- 在<< BLOCK和BLOCK之间的内容会被当成注释
- 在: ’’中的内容会被当成注释
2.3 算术运算
#! /bin/bash
a=10
b=20
if [[ $a = $b ]]; then echo "equal";
elif [[ $a > $b ]]; then echo "big";
elif [[ $a < $b ]]; then echo "samll";
fi
echo `expr $a + $b `
echo `expr $a - $b`
echo `expr $a \* $b`
echo `expr $a / $b`
echo `expr $a % $b`
2.4 文件参数传递
#! /bin/bash
echo $1,$2,$3
echo "文件名" $0
echo "参数数量" $#
echo "文件内容" $*
echo "return" $?
2.5 Bash 与目录操作命令结合
# 创建目录并生成文件
mkdir test
cd test
echo "hello" > test.txt
ls
2.6 Bash 与内存操作结合
#!/bin/bash
for i in `ps aux | awk '{print $6}'|grep -v 'RSS'`
do
count=$[ $count+$i ]
done
echo "$count/kb"
~