# 第三章
# 变量
# 系统变量
echo $USER
echo $PWD
echo $HOME
1
2
3
2
3
# 自定义变量
- 定义变量,a=1,b=2,echo $a+$b
- unset,撤销
- readonly只读变量,类似于java中的final,不可修改,不可撤回
# 特殊变量
| 变量 | 描述 |
|---|---|
| $n | n 为数字,$0表示该脚本名称,$1-$9表示1第一个到第九个参数,十以上的参数,用大括号${10} |
| $# | 参数的个数 |
| $* | 表示命令行中所有的参数,把所有参数看成一个整体 |
| $@ | 表示命令行中所有的参数,把每个参数区分对待 |
| $? | 返回上一个命令的执行状态,若值为0,说明上一个命令正确执行 |
# 基本语法
# 运算符
#!/bin/bash
a=1
b=2
echo $a+$b
echo $[$a+$b]
echo $(($a+$b))
1
2
3
4
5
6
2
3
4
5
6
# 条件判断
语法 [ $a = $b ]
# 两个整数之间比较
| 符号 | 含义 |
|---|---|
| = | 字符串比较 |
| -lt | 小于 |
| -le | 小于等于 |
| -eq | 等于 |
| -qt | 大于 |
| -ge | 大于等于 |
| -ne | 不等于 |
# 按照文件权限进行判断
| 符号 | 含义 | 例子 |
|---|---|---|
| -r | 有读的权限 | 脚本有没有读权限:[ -r a.sh ] |
| -w | 有写的权限 | |
| -x | 有执行的权限 |
# 按照文件类型进行判断
| 符号 | 含义 | 例子 |
|---|---|---|
| -f | 文件存在且是一个常规文件file | 查看文件是否存在:[ -f a.sh ] |
| -e | 文件存在,条件判断式 | |
| -d | 文件存在且是一个目录dir |
# 流程控制
# if判断
模版一:
if [ 条件判断式 ];then
程序
fi
模版二:
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# case语句
case $变量名 in
"v1")
程序
;;
"v2")
程序
;;
*)
程序
;;
esac
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# for循环
模版一:
for((i=0;i<=100;i++))
do
程序
done
模版二:
for i in $@
do
echo $i
done
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# while循环
while [ 条件表达式 ]
do
程序
done
1
2
3
4
2
3
4
# read读取控制台输入
#!/bin/bash
read i
echo $i
read -p "请输入:" p
echo $p
read -p "请在3s内输入:" -t 3 s
echo $s
1
2
3
4
5
6
7
2
3
4
5
6
7
# 函数
函数返回值的是状态码(函数执行结果)
#!/bin/bash
function func01(){
echo abcd;
}
func01
function func01 {
echo abcd;
}
func01
func01(){
echo abcd;
}
func01
func01(){
echo $[$1+$2];
}
func01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Shell流处理工具
# cut
剪,在文件中负责剪切数据用的。cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
# 基本用法
cut 选项参数 filename
说明:默认分隔符是制表符
# 选项参数
| 选项参数 | 功能 |
|---|---|
| -f | 列号,提取第几列 |
| -d | 分隔符,按照指定分隔符分割列 |
| -c | 指定具体的字符 |
# 案例实操
ifconfig | grep broadcast
ifconfig | grep broadcast | cut -d " " -f 2
ifconfig | grep broadcast | cut -d " " -f 2 | cut -c 1,2,3,4,5,6,7,8,9,10,11,12
1
2
3
2
3
# sed
一种流编辑器。
# 基本用法
sed 选项参数 命令 filename
# 选项参数
| 选项参数 | 功能 |
|---|---|
| -e | 直接在指令列模式上进行sed的动作编辑 |
| -i | 直接编辑文件 |
# 命令功能
| 命令 | 功能描述 |
|---|---|
| a | 新增,a的后面可以接字符串,在下一行出现 |
| d | 删除 |
| s | 查找并替换 |
# 案例实操
# awk
# sort
| 选项 | 说明 |
|---|---|
| -n | 依照数值大小排序 |
| -r | 默认升序,指定则降序 |
| -t | 设置排序时所用的分隔字符 |
| -k | 指定需要排序的列 |
cat /etc/passwd | grep ^_a | sort -t : -k 3 -r
1