文章目录
简介
我们已经能够熟练的在终端中输入命令来完成一些常用的操作,但是我们都是一条一条输入命令。这样会很麻烦,那么有没有一种方式可以将很多条命令放到一个文件里面,然后直接运行这个文件即可?肯定有,这个就是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的执行结果如下图:
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的执行结果如下图:
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的执行结果如下图:
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的执行结果如下图:
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的执行结果如下图:
函数传参
编写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,执行结果如下图:
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时结束循环执行结果如下图:
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时结束循环执行结果如下图:
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执行结果如下图:
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执行结果如下图: