目录
1、何为变量
变量的基础知识
1.1、取名字
1.2、弱引用和强引用
1.3、read -p
1.4、变量的作用范围
1.5、运算(整数)
1.6、环境变量
1.7、位置变量
1.8、预设变量
2、条件语句
2.1、测试
2.1.1、比较整数数值
2.1.2、字符串比较
2.1.3、逻辑测试(短路运算)
2.1.4、双中括号
3.4.6 () {}
2.2、if
2.2.1、分支
2.2.2、case
2.3、echo
1、何为变量
变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念
所以保存将来会变化的数据,即使数据变化,直接调用变量即可
例如:
#!/bin/bash
i=1
echo "$i"
将 i 定义个变量 1
$i 代表 i的变量 及 1
变量的基础知识
常见的变量的类型:
自定义变量:由用户自己定义,修改和使用
环境变量:由系统维护,用于设置工作环境
只读变量:只可以读取不可以更改
位置变量:通过命令行给脚本传递参数
预定义变量:bash中自带的变量,不能修改
还有一些是系统内置变量:RANDOM(随机数字0~32767 常用于余的计算:0到50随机一个数 i=$RANDOM%50+1)、UID(当前用户的UID)、USER(当前用户的名称)等
1.1、取名字
给变量取名字很有讲究:
- 需要区分大小写,大是大,小是小
- 不能使用程序中的保留字和内置变量
- 用的字符只可以是数字、字母和下划线,且不可以以数字开头
- 名字尽量通俗易懂,越简单越好,但你自己要看的懂,别到时候自己都分不清了
变量引用的方式可以分为三种
直接引用:变量直接等于参数
变量引用:变量等于另一个变量
命令引用:变量等于命令的结果
name='123456' 直接引用
sum="$RANDOM" 变量引用
i=$(ls /opt/) 命令引用
y=`ls /mnt/` 命令引用
变量名=变量量
1.2、弱引用和强引用
什么时候用强引用,什么时候用弱引用
"$name " 弱引用,其中的变量引用会被替换为变量值
'$name ' 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
1.3、read -p
将键盘输入的内容转变为变量
1.4、变量的作用范围
默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。
可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所子shell环境中可以继续使用
1.5、运算(整数)
let格式:
let b=[变量]+[变量]
echo $b
特殊格式: i++ sum+=i
1.6、环境变量
环境变量就是固定的变量,由系统提前创建,用来设置用户的工作环境,可以使用env查看环境变量
常用的环境变量:
$USER 表示用户名称
$HOME 表示用户的宿主目录
$LANG 表示语言和字符集
$PWD 表示当前所在工作目录
$PATH 表示可执行用户程序的默认路经
1.7、位置变量
位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示
1.8、预设变量
系统帮你定义好了 拿来用就可以了
-
$*:表示所有位置参数的内容看成一个整体返回 返回所有
-
$@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有
-
$?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
-
$#:表示命令行中位置参数的总个数
-
$0:表示当前执行的脚本或程序的名称 当前脚本的名字
-
$$:当前进程id
-
$!: 后台任务最后一个id
2、条件语句
2.1、测试
test 测试文件的表达式 是否成立
操作符:
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-a:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
-L: 测试是否为软连接文件
2.1.1、比较整数数值
[ 整数1 操作符 整数2 ] 公式
-
-eq:第一个数等于(Equal)第二个数
-
-ne:第一个数不等于(Not Equal)第二个数
-
-gt:第一个数大于(Greater Than)第二个数
-
-lt:第一个数小于(Lesser Than)第二个数
-
-le:第一个数小于或等于(Lesser or Equal)第二个数
-
-ge:第一个数大于或等于(Greater or Equal)第二个数
2.1.2、字符串比较
常用的测试操作符
-
=:字符串内容相同
-
!=:字符串内容不同,! 号表示相反的意思
-
-z:字符串内容为空
-
-n: 字符是否存在
2.1.3、逻辑测试(短路运算)
常见条件
-
-a或&&:逻辑与,“而且”的意思全真才为真
-
-o或||:逻辑或,“或者”的意思一真即为真
-
!:逻辑否
2.1.4、双中括号
[[ expression ]] 用法
== 左侧字符串是否和右侧的PATTERN相同,注意:此表达式用于[[ ]]中,PATTERN为通配符
=~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配,注意: 此表达式用于[[ ]]中;扩展的正则表达式
3.4.6 () {}
(CMD1;CMD2;...)和 {空格CMD1;CMD2;...; } 都可以将多个命令组合在一起,批量执行
2.2、if
根据不同选项,提供不同结果
2.2.1、分支
单分支
if 判断条件;
then 条件为真的分支代码
fi
双分支
if 判断条件; then
条件为真的分支代码else
条件为假的分支代码fi
多分支
if 判断条件1
then
条件1为真的分支代码elif 判断条件2
then
条件2为真的分支代码elif 判断条件3;then
条件3为真的分支代码
else
以上条件都为假的分支代码fi
2.2.2、case
case 变量引用 in
1) 分支1
;;
2) 分支2
;;
...
*)
默认分支
;; 结束符号
2.3、echo
echo -n 表示不换行输出
echo -e 表示输出转义符
常用的转义符