Linux嵌入式学习之Ubuntu入门(六)shell脚本详解

系列文章内容

Linux嵌入式学习之Ubuntu入门(一)基本命令、软件安装、文件结构、编辑器介绍

Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等

Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限

Linux嵌入式学习之Ubuntu入门(四)Makefile

Linux嵌入式学习之Ubuntu入门(五)汇编语法学习

Linux嵌入式学习之Ubuntu入门(六)shell脚本详解


文章目录


前言

最近痛定思痛,觉得自己应该硬杠Linux,确实有些难度,但是我觉得学习之后一定会大有用处,而且我不希望局限在当下的情况,学习完嵌入式Linux之后,我想学习制作一些更加有难度,更加锻炼人的东西。

内容有些多,我觉得最好是过一遍,好好记录一下,一些开发最好把暂时用不到的模块跳过,时间不够。


shell脚本详解

shell脚本类似windows的批处理文件,将连续可执行命令写成一个文件,提供数组、循环、条件判断的等功能,shell脚本一般是Linux运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握shell脚本最基础的部分即可。

shell脚本是纯文本文件,命令从上而下,一行一行执行,扩展名为.sh

第一行一定为:(表示使用bash,表示实现shell的环境路径)

c 复制代码
#!/bin/bash

例如将echo命令写在文件中,在命令窗输出字符串

如上图所示,通过 ls -l 查看tesh.sh文件的权限,之后通过chmod(change mode)修改文件的权限,之后即可运行,但是修改回去后发现,只有读写是不能执行的。

关于文件权限相关见:Linux嵌入式学习之Ubuntu入门(三)用户、用户组及文件权限

详细学习linux的shell脚本推荐《鸟哥的Linux私房菜》

shell脚本语法

外部输入

程序功能:外部输入进行变量赋值

这就涉及到shell的命令编写语法了,需要学习积累

read命令读取输入值,类比C语言的各种函数吧

read命令参数 含义
read -a arrayname 把单词清单读入arrayname的数组里
read -p "text" 打印提示(text),等待输入,并将输入存储在REPLY中。
read -r line 允许输入包含反斜杠。
read -t 3 指定读取等待时间为3秒。
read -n 2 var 从输入中读取两个字符并存入变量var,不需要按回车读取。
read -d " :" var 用定界符" :"结束输入行。

整型计算

程序功能:输入两个整型完成加法运算:

shell还支持整型运算,数值计算用 $(表达式),如上图

test命令

程序功能:查看文件是否存在:

程序功能:测试输入字符串是否相等:

test命令参数 含义
-e 当路径存在时返回真
-f 当路径存在且为文件时返回真
-d 当路径存在且为文件夹时返回真
-z 当str为空时返回真
-n 当str为非空时返回真
= 两个字符串相等时返回真
== 两个字符串相等时返回真,同=
!= 两个字符串不相等时返回真

还有大于小于,各种逻辑运算符的参数,之后用到了再积累

[ ]判断符

程序功能:判断字符串相等。

【】前后要有空格,同时记得变量加上双引号,可以用==或者!=

如果不加双引号,那么这个变量就不可赋值带空格的字符串,因为系统会识别为多个变量。发送错误提示:


first赋值为a,系统输出1,first赋值"1 2",系统会识别为两个变量,这样就不是判断字符串相等

默认变量

程序功能:测试各个默认变量的作用


0 0~ 0 n,表示shell脚本的参数,shlle脚本命令本身为$0

$#:#表示最后一个参数的标号。(参数的个数)

$@:表$1、$2、$3...即所有的参数的集合

条件判断

程序功能:判断输入为Y或者N,并输出语句

格式:

c 复制代码
/第一种
if  条件判断 ; then
 //判断成立要做的事情
fi

/第二种
if
  条件判断 ; then
 //条件判断成立要做的事情
else
 //条件判断不成立要做的事情。
fi

/第三种
if  条件判断 ; then
 //条件判断成立要做的事情
elif [条件判断]; then    //可以叠加多个elif
//条件判断成立要做的事情
else
 //条件判断不成立要做的事情。
fi

程序功能:*这里代表的是通配符,表示所有符号,如果输入参数为a或者b,会输出语句,其他输入都进入通配符的程序块

c 复制代码
//类似C的switch case语句
case $变量 in
"第1个变量内容")
	程序段
	;;	//表示该程序块结束!!
"第2个变量内容")
	程序段;;
"第n个变量内容")
	程序段
	;;
esac

函数


c 复制代码
function fname () {
	//函数代码段
}

还支持传参:a b在这里是传递的参数,也就是C语言里面的实参

循环

while循环:

c 复制代码
while [条件] 	//括号内的状态是判断式
do			//循环开始
	//循环代码段
done

//还有另外一种until do done,表示条件不成立的时候循环,条件成立以后就不循环了,写法如下:
until [条件]
do
//循环代码段
done

for循环:

c 复制代码
for var in con1 con2 con3......
do
//循环代码段
done
 
for循环数值处理,写法
for((初始值; 限制值; 执行步长))
do
//循环代码段
done


相关推荐
CSDN_PBB3 小时前
[STM32 - 野火] - - - 固件库学习笔记 - - - 十五.设置FLASH的读写保护及解除
笔记·stm32·学习
安於宿命4 小时前
【Linux】进程间通信——进程池
linux·c++
新兴ICT项目支撑5 小时前
天翼云910B部署DeepSeek蒸馏70B LLaMA模型实践总结
linux·运维·服务器·910b·天翼云·deepseek r1
鸡啄米的时光机6 小时前
vscode的一些实用操作
vscode·学习
Kai HVZ7 小时前
《深度学习》——调整学习率和保存使用最优模型
人工智能·深度学习·学习
Spike()7 小时前
HaProxy源码安装(Rocky8)
linux·负载均衡
网硕互联的小客服7 小时前
如何提高网站在百度中的权重?
linux·运维·服务器·windows·安全
魔希达7 小时前
windows在wsl ubuntu环境中启用cuda加速AI推理和训练
人工智能·windows·ubuntu
守护者1708 小时前
JAVA学习-练习试用Java实现“使用Apache Ignite对大数据进行内存计算和快速筛查”
java·学习
守望时空339 小时前
Linux内核升级指南
linux·操作系统