 Shell学习笔记
Shell学习笔记
  # 基本知识
- 变量赋值时,'='左右两边都不能有空格 
- BASH中的语句结尾不需要分号(";") 
- 除了在变量赋值和在FOR循环语句头中,BASH中的变量使用必须在变量前加 - $符号
- 由于BASH程序是在一个新的进程中运行的,所以该程序中的变量定义和赋值不会改变其他进程或原始Shell中同名变量的值,也不会影响他们的运行 
- BASH中的变量既然不需要定义,也就没有类型一说,一个变量即可以被定义为一个字符串,也可以被再定义为整数。如果对该变量进行整数运算,他就被解释为整数;如果对他进行字符串操作,他就被看作为一个字符串 
- 单引号引起的内容会被全部当做普通字符,即全部原样 - NUM=100 #Print NUM echo 'NUM'1
 2
 3
- ``倒引号内的字符串会被当作shell命令行解析执行 - list=`ls` #Print 文件列表 echo $list1
 2
 3
- expr: 对表达式求值,表达式中,数字和运算符之间要有空格 - SUM=`expr 1 + 3` #Print 4 echo $SUM1
 2
 3
- 表达式求值,使用*需要加转义符 - SUM=`expr 1 \* 3` #Print 3 echo $SUM1
 2
 3
- []:对被括起来的表达式求值 - i=1 sum=0 while [ $i -le 100 ]; do echo $i sum=$[$sum+$i] i=$[$i+1] done1
 2
 3
 4
 5
 6
 7
# 比较操作
| Function | Operator | Command | 
|---|---|---|
| 相同 | -eq | = | 
| 不同 | -ne | != | 
| 大于 | -gt | > | 
| 小于 | -lt | < | 
| 大于或等于 | -ge | >= | 
| 小于或等于 | -le | <= | 
| 空 | -z | null | 
| 不为空 | -n | !null | 
推荐在比较时尽量不要使用 -n ,而用 ! -z 来代替。(其中符号 "!" 表示求反操作)
# 文件判断
| Operator | Function | 
|---|---|
| -e file | file 已经存在 | 
| -f file | file 是普通文件 | 
| -s file | file 大小不为零 | 
| -d file | file 是一个目录 | 
| -r file | file 对当前用户可以读取 | 
| -w file | file 对当前用户可以写入 | 
| -x file | file 对当前用户可以执行 | 
| -g file | file 的 GID 标志被设置 | 
| -u file | file 的 UID 标志被设置 | 
| -O file | file 是属于当前用户的 | 
| -G file | file 的组 ID 和当前用户相同 | 
| file1 -nt file2 | file1 比 file2 更新 | 
| file1 -ot file2 | file1 比 file2 更老 | 
# 局部变量
在 BASH 程序中如果一个变量被使用了,那么直到该程序的结尾,该变量都一直有效。为了使得某个变量存在于一个局部程序块中,就引入了局部变量的概念。BASH中,在变量首次被赋初值时加上local关键字就可以声明一个局部变量。
# 条件判断数据
if 语句用于判断和分支,其语法规则和 C 语言的 if 非常相似。
其几种基本结构为:
if [ expression ]  
then        
	statments
fi 
1
2
3
4
2
3
4
if [ expression ] 
then  
	statments  
elif [ expression ] 
then  
	statments 
else  
	statments 
fi
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# for循环语句
for $var in   Arr
do 
	statments 
done 
1
2
3
4
2
3
4
# BASH 中有一些保留变量
- $PWD 表示当前工作路径
# 函数
# 函数的参数数组索引是从1开始的
function sum(){
	echo "参数:$1,$2"
	echo $[$[$1+$2]*$[$2-$1+1]/2];
}
sum 1 100
1
2
3
4
5
6
2
3
4
5
6
# 字符串操作
- 字符串截取 -c 起始位置到结束位置 - STR="12345678" echo $STR | cut -c 2-61
 2
- 参数 - # $# 传递到脚本的参数个数 echo $# # $0 脚本名字 echo $0 # $1 位置参数 echo $11
 2
 3
 4
 5
 6
上次更新: 2022/12/01, 11:09:34
