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


相关推荐
limengshi1383921 小时前
通信工程学习:什么是IP网际协议
网络·网络协议·学习·tcp/ip·信息与通信
shelby_loo2 小时前
在Ubuntu下通过Docker部署NAS服务器
服务器·ubuntu·docker
wait a minutes3 小时前
【ubuntu】ubuntu20.04安装chrome浏览器
chrome·ubuntu
IM_DALLA3 小时前
【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL70
学习·fpga开发·verilog学习
布丁不叮早起枣祈3 小时前
10.6学习
学习
望森FPGA3 小时前
HDLBits中文版,标准参考答案 | 3.1.2 Multiplexers | 多路复用器
学习·fpga开发
网安老伯3 小时前
【2024版】最新kali linux入门及常用简单工具介绍(非常详细)零基础入门到精通,收藏这一篇就够了_kalilinux
linux·运维·服务器·开发语言·web安全·网络安全·xss
985小水博一枚呀3 小时前
【深度学习基础模型】稀疏自编码器 (Sparse Autoencoders, SAE)详细理解并附实现代码。
人工智能·python·深度学习·学习·sae·autoencoder
小魏冬琅3 小时前
命题逻辑与谓词逻辑 - 离散数学系列(二)
学习
9毫米的幻想4 小时前
【C++】—— 继承(上)
c语言·开发语言·jvm·c++·学习