8.2 shell 脚本
一、基本规则
1)脚本文件命名的后缀必须是 .sh。
2)Shell脚本内容的第一行必须是 #!/bin/bash,告诉操作系统使用哪个解释器来执行脚本文件中的命令。它指示系统使用位于 /bin/bash 路径下的 Bash shell 来执行脚本。
3)脚本文件里以 # 作为语句的注释。
4)使用 echo 输出内容。
5)使用 cat 查看文件内容。
二、shell 变量:没有数据类型,只有字符串
1)系统预定义变量
$HOME (表示当前用户的主目录。)、$PWD、$SHELL (表示当前用户使用的 Shell 解释器的路径。)、$USER (存储了当前登录用户的用户名。)
2)自定义变量
① 基本语法:
定义变量:变量名=变量值
撤销变量:unset 变量名
声明只读变量:readonly 变量=3 #只读变量不能修改,也不能被撤销。
变量引用:$a、${a}、"${a}" 这三种方式等价。
② 规则:不能以数字开头;环境变量名建议大写;等号两边不能有空格;变量都是字符串类型;变量值若有空格,需用引号括起来。
单双引号区别:单引号消除所有字符的特殊意义;双引号消除除了$、""、''三种以外其他字符的特殊意义。
3)特殊变量
$n # $0 代表脚本名称,$1~$9 代表第一到第九个参数,十以上的参数用 ${10}。$# # 获取参数个数。$* # 获取命令行所有参数,但把所有参数看成一个整体。$@ # 获取命令行所有参数,但把每个参数区别对待。$? # 存放最后一次执行的命令返回状态,如果为0,则证明上一个命令正确执行,否则没有正确执行。
4)读取控制台输入
read (选项) (参数) 变量
-p:指定读取值时的提示符。-t:指定读取值时等待的描述,如果不加则一直等待。
例:read -p "Enter your name:" -t 7 a
三、数组
定义方式:1)a=(1 2 3 4 5),各个数据之间用空格隔开;2)a[0]=1;a[1]=2;
#!/bin/bash
a=(2 5 7 10)
echo ${a[2]} #输出下标为 2 的数据
echo ${#a[*]} #输出数组的长度
echo ${#a[@]} #输出数组的长度
echo ${a[@]:2} #截取下标从 2 到最后
echo ${a[@]:1:2} #截取从下标 1 开始的 2 个元素。
四、单括号与双括号
1. 单括号():
1)命令组:在子 shell 中执行一组命令,单括号内的命令会在一个新的子 shell 进程中运行,所以在括号内对变量的修改不会影响到父 shell 中的同名变量。
#!/bin/bash a=1 ( a=2; echo "Inside subshell: $a" ) echo "Outside subshell: $a" # 在这个例子中,( a=2; echo "Inside subshell: $a" ) 是一个命令组,在子 shell 中执行。在子 shell 里将变量 a 的值修改为 2 并输出,但父 shell 中的 a 值仍为 1。
2)数组定义:用于定义数组,数组元素用空格分隔。
my_array=(apple banana cherry)
echo ${my_array[1]} # 输出 "banana"
2. 双括号(()):
1)算术扩展:用于执行算术运算,支持常见的算术运算符,如 +、-、*、/、% 等,并且变量名前不需要加 $ 符号。
a=5 b=3 result=$((a + b)) echo $r
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。