第1期Ubuntu入门篇:【19】shell脚本条件判断、函数和循环

简介

我们已经能够熟练的在终端中输入命令来完成一些常用的操作,但是我们都是一条一条输入命令。这样会很麻烦,那么有没有一种方式可以将很多条命令放到一个文件里面,然后直接运行这个文件即可?肯定有,这个就是shell脚本!

shell脚本类似windows的批处理文件,shell脚本就是将连续执行的命令写成一个文件。shell脚本提供数组、循环、条件判断的等功能。

shell脚本一般是Linux运维或者系统管理员要掌握的,作为嵌入式开发人员,只需要掌握shell脚本最基础的部分即可

目标

了解Ubuntu下shell脚本。

阅读基础

熟悉计算机。

环境说明

  • windows10

参考资料

  • 原子文档:I.MX6ULL开发指南 第三章
  • NXP官方文档:I.MX6ULL参考手册、数据手册

shell脚本条件判断

​ shell脚本支持条件判断,虽然可以通过&&和||来实现简单的条件判断,但是稍微复杂一点的场景就不适合了。

if then判断

shell脚本提供了if then条件判断语句,写法:

if 条件判断 ; then

//判断成立要做的事情

fi

编写shell脚本,判断输入的是Y/y还是N/n。

#! /bin/bash

read -p "please input(Y/N):" value

if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
	echo "your input is Y"
	exit 0

fi

if [ "$value" == "N" ] || [ "$value" == "n" ]; then
	echo "your input is N"
	exit 0
fi

运行my.sh,分别输入y,n,dddd的执行结果如下图:

image-20210816194344293

if then else 判断

还有if then else 语句,写法:

if 条件判断 ; then

//条件判断成立要做的事情

else

//条件判断不成立要做的事情。

fi

将上面的shell改为如下形式,是Y/y就输出Y,不是就输出读到的字符。

#! /bin/bash

read -p "please input(Y/N):" value

if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
	echo "your input is Y"
	exit 0
else
	echo "your input is $value"
	exit 0
fi

运行my.sh,分别输入Y/y,N/n,dddd的执行结果如下图:

BolgImage-20210816195138

if then elif else 判断

还有if then else if else 语句,写法:

if 条件判断 ; then

//条件判断成立要做的事情

elif [条件判断]; then

//条件判断成立要做的事情

else

//条件判断不成立要做的事情。

fi

将上面的shell改为如下形式,是Y/y就输出Y,是N/n就输出N,都不是就输出your input can't identify!!!

#! /bin/bash

read -p "please input(Y/N):" value

if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
	echo "your input is Y"
	exit 0
elif [ "$value" == "N" ] || [ "$value" == "n" ]; then
	echo "your input is $value"
	exit 0
else
	echo "your input can't identify!!!"
fi

运行my.sh,分别输入Y/y,N/n,dddd的执行结果如下图:

BolgImage-20210816200158

case判断

最后还有case语句,写法:

case $变量 in

“第1个变量内容”)

程序段;; //表示该程序块结束!!

“第2个变量内容”)

程序段;;

“第n个变量内容”)

程序段;;

*) //其它情况

程序段;;

esac

编写shell脚本,判断输入的是a还是b还是不能识别。

#! /bin/bash

case $1 in
	"a")
		echo "param is:a"
	;;
	"b")
		echo "param is:b"
	;;
	*)
		echo "can't identify!!!"
	;;
esac

运行my.sh,分别带参数a、b、c的执行结果如下图:

BolgImage-20210816201137

shell脚本函数

​ shell脚本也支持函数,shell脚本函数可以带参数。

函数写法如下:

function fname () {

//函数代码段

}

普通函数

编写shell脚本,判断输入的是-h还是-c,-h调用函数help,-c调用函数close。

#! /bin/bash

function help(){
    
    
	echo "this is help cmd!"
}

function close(){
    
    
	echo "this is close cmd!"
}

case $1 in
	"-h")
		help
	;;
	"-c")
		close
	;;
esac

运行my.sh,分别带参数-h、-c的执行结果如下图:

BolgImage-20210816202241

函数传参

编写shell脚本,判断输入的是-h还是-c,-h调用函数help,-c调用函数close。

#! /bin/bash

print(){
    
    
	echo "param 1:$1"
	echo "param 2:$2"
}

print a b #传参a和b

运行my.sh,执行结果如下图:

BolgImage-20210816202855

shell循环

while循环

shell脚本也支持循环,比如 while do done,表示当条件成立的时候就一直循环,直到条件不成立。写法如下:

while [条件] //括号内的状态是判断式

do //循环开始

//循环代码段

done

编写shell脚本,输入值为close时结束循环。

#! /bin/bash

while [ "$value" != "close" ]
do
	read -p "please input str:" value
done

echo "stop while!"

运行my.sh,当输入close时结束循环执行结果如下图:

BolgImage-20210816203525

until循环

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

until [条件]

do

//循环代码段

done

编写shell脚本,输入值为close时结束循环。

#! /bin/bash

until [ "$value" == "close" ]
do
	read -p "please input str:" value
done

echo "stop until!"

运行my.sh,当输入close时结束循环执行结果如下图:

BolgImage-20210816204041

for循环固定次数

for循环,使用for循环可以知道有循环次数,写法:

for var in con1 con2 con3……

do

//循环代码段

done

编写shell脚本,循环四次,每次循环的值分别为wx、wx1、wx2、wx3。

#! /bin/bash

for name in wx wx1 wx2 wx3
do
	echo "your name:$name"
done

运行my.sh执行结果如下图:

BolgImage-20210816204502

for循环不固定次数

for循环数值处理,写法:

for((初始值; 限制值; 执行步长))

do

//循环代码段

done

编写shell脚本,循环count次,每次total值循环加1。

#! /bin/bash

read -p "please input count:" count

total=0
for((i=0; i<=count; i=i+1 ))
do
	total=$(($total+$i))
done

echo "1+2+......+$count=$total"

运行my.sh,输入100执行结果如下图:

BolgImage-20210816205352

最近更新

查看本文最近更新请点击

Guess you like

Origin blog.csdn.net/aa1319594154/article/details/119742101