嵌入式学习

shell脚本之知识点

1.运算指令

		shell脚本中的变量都是字符串,如果要进行算术运算(5-3)的操作,需要使用算术运算指令实现
a.运算指令
(1). (())
		书写格式与C语言差不多,格式不严格
		运算表达式中变量存储的必须是整数形式的字符串,不然会报错,也就是a=4,而不是a='w'这种。
((a=1+2))  //a=$((1+2))
((c=$a+$b))   //c=$(($a+$b)),引用a+b的结果,但是(())中的变量引用可以不加符号,即等同于((c=a+b))
(2).let
		let 变量=算术表达式 //中间不允许有空格
		let a=1+2
		let c=a+b    //let c=$a+$b   右值当中可以不加$引用变量。
(3).$[]

$[] 自带一个引用,所以它的运行结果不能单独占用一行,必须要有变量接收或者echo打印。里面的表达式可以不加$,也可以有空格。

(4).expr
		可以做算术运算,但格式严整,一般不用。
		一般适合于字符串的运算
expr $字符串1 : $字符串2  //比较字符串和字符串2是否相同并显示到终端,不同为0,相同则返回相同字符的个数
expr match $字符串1 字符串2  //同上
expr substr $字符串 下标 长度 //从字符串的下标位置(从1开始)获取指定长度的字串
expr substr $str 2   3
expr index $字符串 字符 //从字符串中查找指定字符所在下标的最小位置,(下标从1开始),如果找不到则返回0
expr index "www.baidu.com" "baidu"
expr length $字符串 //获取字符串的长度

图2

二、绝对路径与相对路径(Linux)

1.绝对路径
  • 绝对路径是从文件系统的根目录(通常是/)开始的完整路径。
  • 它提供了文件或目录的完整位置,不依赖于当前工作目录。
  • 例如:/home/user/documents/file.txt是一个绝对路径,它指定了文件file.txt的完整路径,无论当前工作目录是什么都能准确找到它。
2.相对路径
  • 相对路径描述了从当前工作目录到目标文件或目录的路径。
  • 可以使用 . 表示当前目录,… 表示上级目录,以及其他相对路径来导航到目标位置。
  • 在命令行中,可以通过在命令中使用相对路径来访问文件或目录,例如 ls documents。
  • 在脚本或程序中,相对路径可能需要与程序的当前工作目录相结合,因此需要小心处理。
  • 使用方法
  1. 使用相对路径访问文件或目录:
    假设当前工作目录是 /home/user,目标文件是 /home/user/documents/file.txt。
    使用相对路径 documents/file.txt 可以直接访问目标文件。
cd /home/user
cat documents/file.txt
  1. 使用 … 访问上级目录:
    假设当前工作目录是 /home/user/documents,想要访问 /home/user/pictures/photo.jpg。
    使用相对路径 …/pictures/photo.jpg 可以访问上级目录的子目录中的文件
cd /home/user/documents
cp ../pictures/photo.jpg .

  1. 使用 . 表示当前目录:
    假设当前工作目录是 /home/user/documents,想要访问当前目录中的文件 document.txt。
    使用相对路径 ./document.txt 可以直接访问当前目录中的文件。
cd /home/user/documents
cat ./document.txt
  1. 结合多个相对路径:
    假设当前工作目录是 /home/user,想要访问 /var/log/messages。
    可以结合多个相对路径来访问目标文件。
cd /home/user
cat ../../var/log/messages

三、分支循环语句

1.if
if [ 判断语句 ]  //注意空格
then
	语句块
fi
、、、、、、、、、、、、
if [ 判断语句 ]
then 
	语句块1
elif
then
	语句块2
else
	语句块3
fi
1.整数大小比较
判断语句格式
$变量 指令 $变量   //变量中必须是整数型字符串
指令
	-gt		大于		greater than
	-lt		小于		less	than
	-eq		等于		equal
	-ge     大于等于  
	-le		小于等于
	-ne 	不等于

图3

2.字符串的比较
		非整型字符串比较
		比较逻辑同C语言中的strcmp一致,从第一个字符开始依次往后比较,直到比较到不同,或两个字符串同时结束
		变量中存储的字符串中可能有空格字符,因此在变量引用时加上" "最好

格式: $变量1 指令 $变量2

指令含义
\<小于
\>大于
==或=比较字符串是否相等
!=比较字符串是否不相等

格式:指令 $变量

指令含义
-z判断字符串是否为空,若为空,返回真
-n判断字符串是否为非空,若为非空,返回真

在这里插入图片描述
在这里插入图片描述

3.逻辑运算

格式 if [ 判断语句1 指令 判断语句2 ]

指令含义
-aand(与)
-oor(或)

!非 --------》 if [ ! 判断语句 ]

2.case-in分支
case $变量 in   //$变量中的变量可以是常量也可以是变量,还以可以是算术表达式。就是变量中的内容和选项比较,注意一些特殊的符号,可能要加\这个转义符号
	选项1)
		语句块1
		;;  //" ;; "等价于break,所以不能忽略
	选项2)
		语句块2
		;;
	*)
		语句块3   //*是通配符,表明上面选项都不符合时,默认执行语句块3
		;;
esac //case -in结构的结尾

选项中的内容可以使用正则表达式,在多个选项之间有关系和规律时

符号含义
[]其中可以填字符集合,但是只匹配其中的任意单一字符
[1234567890]代表0-9中的任意一个字符
[0-9]同上
a-Z代表小写的a-z和大写的A-Z
?可以通配任意单一字符
*可以通配任意0个或多个字符
|多个选项之间使用“|”连接
3. while循环结构
  • shell脚本格式
while [ 判断条件 ]
do
	循环语句
done
4.for循环结构
  • shell脚本格式
for ((i=o;i<10;i++))  //C语言怎么写,括号内就怎么写
do
	循环语句
done
——————————————————————————————
for ((;;)) //死循环格式
do
	循环语句
done
————————————————————————————————
for 循环变量名 in 选项列表 //1将选项列表中的数据赋值依次给循环变量,然后进入循环执行循环语句
do
	循环语句
done
——————————————————————————————————
选项列表
1.  {1..100}//1到100的连续整数序列
2. seq 1 100 //获取1到100的所有整数打印到终端上
3. $(seq 1 2 100 ) //获取1到100的步长为2的整数序列
4.`seq 1 2 100` //同上
————————————————————————————————————
1.省略in和选项列表,列表默认从位置变量获取,从$1开始获取:$1 $2 $3....
5. select-in

格式

select 变量名 in 选项列表
do 
	循环语句
done
————————————————————————————————————
1.会生成选项列表界面,以便选择
2.ctrl+d可以结束select循环,继续往后执行
3.输入的选项不在选项列表中,会给变量赋值一个空
4.不输入直接回车,会将选项列表界面重写打印一遍
6. break和continue
1.break
1.break 跳出当前循环,只能向往跳出一层//与c基础一致
2.break n 向外跳出n层循环,若n大于循环嵌套的层数,会直接跳出最外层循环

在这里插入图片描述

2.continue
1.contiune 强制结束当前层循环,进入当前层循环的下一次循环
2.若n大于循环嵌套的层数,会直接结束最外层的当前次循环,进入最外层的下一次循环
七、shell脚本中的函数
1.定义格式
function 函数名()  //定义函数时不需要写参数列表
{
	函数功能实现代码
}
2.调用格式
  • 直接写函数名即可如 show
  • 函数定义必须放在函数调用之前,否则会不认识函数,因为shell脚本是从上往下运行的
3.传参方式
  • 不传参,因为shell脚本中的变量默认都是全局的,所以不用传参,函数内部以及函数外部实际上可以访问同一个变量
  • 如果想要变量为局部变量,可以在变量前加上local声明loacl 变量
  • 函数调用的时候传入参数即可
    函数名 参数1 参数2 参数3
    add $a $b $c
  • 函数的内部若想要获取到传入的参数,需要使用
$0:shell脚本名
$1 $2 $3
$@或者$*  获取所有参数,除了$0
$#		  获取所有参数的个数,除了$0

在这里插入图片描述

4.返回值
  • 若只写return后面没有填数据,或者根本没有写return,此时函数默认会返回最后一个指令的运行状态,成功返回0。
  • 若return后面想要返回一个数据,这个数据只能是0-255范围内的一个数。一般默认,返回0代表函数运行成功,非0代表函数运行失败。
  • 可以用$?接收函数返回值。

在这里插入图片描述

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值