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


相关推荐
wanzhong23337 分钟前
ArcGIS学习-17 实战-密度分析
学习·arcgis
最小的帆也能远航9 分钟前
2018年下半年 系统架构设计师 综合知识
linux·运维·服务器
疯子@12321 分钟前
nacos1.3.2 ARM 版容器镜像制作
java·linux·docker·容器
知识分享小能手36 分钟前
React学习教程,从入门到精通,React 组件生命周期详解(适用于 React 16.3+,推荐函数组件 + Hooks)(17)
前端·javascript·vue.js·学习·react.js·前端框架·vue3
Empty_7771 小时前
Linux防火墙-Iptables
linux·运维·服务器
十年编程老舅1 小时前
‌C++左值与右值:从基础概念到核心应用‌
linux·c++·右值引用·c++17·c++左值·c++右值·左值引用
飘忽不定的bug1 小时前
Ascend310B重构驱动run包
linux·ascend310
saynaihe2 小时前
关于Ubuntu的 update造成的内核升级
linux·运维·服务器·ubuntu·devops
yuxb732 小时前
Docker 学习笔记(七):Docker Swarm 服务管理与 Containerd 实践
笔记·学习·docker
Dersun3 小时前
python学习进阶之异常和文件操作(三)
开发语言·python·学习·json