Shell学习笔记
# 基本知识
变量赋值时,'='左右两边都不能有空格
BASH中的语句结尾不需要分号(";")
除了在变量赋值和在FOR循环语句头中,BASH中的变量使用必须在变量前加
$
符号由于BASH程序是在一个新的进程中运行的,所以该程序中的变量定义和赋值不会改变其他进程或原始Shell中同名变量的值,也不会影响他们的运行
BASH中的变量既然不需要定义,也就没有类型一说,一个变量即可以被定义为一个字符串,也可以被再定义为整数。如果对该变量进行整数运算,他就被解释为整数;如果对他进行字符串操作,他就被看作为一个字符串
单引号引起的内容会被全部当做普通字符,即全部原样
NUM=100 #Print NUM echo 'NUM'
1
2
3``倒引号内的字符串会被当作shell命令行解析执行
list=`ls` #Print 文件列表 echo $list
1
2
3expr: 对表达式求值,表达式中,数字和运算符之间要有空格
SUM=`expr 1 + 3` #Print 4 echo $SUM
1
2
3表达式求值,使用*需要加转义符
SUM=`expr 1 \* 3` #Print 3 echo $SUM
1
2
3[]:对被括起来的表达式求值
i=1 sum=0 while [ $i -le 100 ]; do echo $i sum=$[$sum+$i] i=$[$i+1] done
1
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-6
1
2参数
# $# 传递到脚本的参数个数 echo $# # $0 脚本名字 echo $0 # $1 位置参数 echo $1
1
2
3
4
5
6
上次更新: 2022/12/01, 11:09:34