输出:
DevYK
DevYK
只读变量:
#4. 只读变量
my_blog_url=“https://www.devyk.top/”
readonly my_blog_url
my_blog_url=“www.baidu.com”
输出:
删除变量:
#变量被删除后不能再次使用。unset 命令不能删除只读变量。
your_name=“小明”
unset your_name
echo $your_name
输出:
可以看到定义了删除变量之后,后面是没有任何输出
变量类型:
运行shell时,会同时存在三种变量:
字符串是 shell 编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
#单引号
str=‘this is a book’
单引号字符串的限制:
#双引号
your_title=“玄幻小说”
str=“嗨, 请问这是一本什么类型的小说? “$your_title” \n”
echo -e $str
输出:
嗨, 请问这是一本什么类型的小说? ““玄幻小说””
双引号的优点:
拼接字符串:
your_name=“DevYK_1”
#使用双引号拼接
str1=“2 我是 “$your_name” !”
str2=“2 我是 ${your_name} !”
echo $str1 KaTeX parse error: Expected 'EOF', got '#' at position 6: str2 #̲使用单引号拼接 str3='1…your_name” !’
str4=‘1 我是 ${your_name} !’
echo $str3 $str4
输出:
2 我是 “DevYK_1” ! 2 我是 DevYK_1 !
1 我是 DevYK_1 ! 1 我是 ${your_name} !
获取字符串长度:
str_length=‘123456’
echo ${#str_length}
输出: 6
提取字符串:
以下实例从字符串第 2 个字符开始截取 4 个字符:
echo ${str_length:1:4}
输出: 2345
查找字符串:
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
echo expr index "$str_length" 3
//是反斜杠 tab 上 1 键左
输出:3
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
例子:
以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名:
echo “Shell 传递参数实例!”;
echo “执行的文件名:$0”;
echo “第一个参数为:$1”;
echo “第二个参数为:$2”;
echo “第三个参数为:$3”;
输出:
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。
与大部分编程语言类似,数组元素的下标由 0 开始。
Shell 数组用括号来表示,元素用 “空格” 符号分割开,语法格式如下:
array_name=(value1 … valuen)
例子:
my_array=(A B “C” D)
echo “第一个元素为: ${my_array[0]}”
echo “第二个元素为: ${my_array[1]}”
echo “第三个元素为: ${my_array[2]}”
echo “第四个元素为: ${my_array[3]}”
#使用@ 或 * 可以获取数组中的所有元素,例如:
echo “数组的元素为: ${my_array[*]}”
echo “数组的元素为: ${my_array[@]}”
#获取数组长度的方法与获取字符串长度的方法相同
echo “数组元素个数为: ${#my_array[*]}”
echo “数组元素个数为: ${#my_array[@]}”
输出:
第一个元素为: A
第二个元素为: B
第三个元素为: C
第四个元素为: D
数组的元素为: A B C D
数组的元素为: A B C D
数组元素个数为: 4
数组元素个数为: 4
Shell 和其他编程语言一样,支持多种运算符,包括:
原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
注意:
算符运算符:
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | expr $a + $b 结果为 30。 |
- | 减法 | expr $a - $b 结果为 -10。 |
* | 乘法 | expr $a \* $b 结果为 200。 |
/ | 除法 | expr $b / $a 结果为 2。 |
% | 取余 | expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
**注意:**条件表达式要放在方括号之间,并且要有空格,例如: [ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]。
a=10
b=20
val=expr $a + $b
echo “a + b : $val”
val=expr $a - $b
echo “a - b : $val”
val=expr $a \* $b
echo “a * b : $val”
val=expr $b / $a
echo “b / a : $val”
val=expr $b % $a
echo “b % a : $val”
if [ $a == $b ]
then
echo “a 等于 b”
fi
if [ $a != $b ]
then
echo “a 不等于 b”
fi
输出:
a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a 不等于 b
注意:
- 乘号(*)前边必须加反斜杠()才能实现乘法运算;
- if…then…fi 是条件语句,后续将会讲解。
- 在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 “*” 不需要转义符号 “” 。
关系运算符:
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
例子:
a=10
b=20
if [ $a -eq b ] t h e n e c h o " b ] then echo " b]thenecho"a -eq b : a 等 于 b " e l s e e c h o " b : a 等于 b" else echo " b:a等于b"elseecho"a -eq $b: a 不等于 b"
fi
if [ $a -ne b ] t h e n e c h o " b ] then echo " b]thenecho"a -ne b : a 不