Shell脚本学习(四)
1.until循环结构
1.1until语句的使用范围
重复测试某个条件,只要条件不成立,则立刻反复执行
1.2until循环的语法
until 条件测试操作
do
命令提示符
done
2.until循环的小案例
打印1-50的和
vim untildemo.sh
#!/bin/bash
i=1
sum=0
until [ $i -eq 51 ]
do
let sum+=$i
let i++
done
echo "和为$sum"
chmod +x untildemo.sh
测试结果
[root@lab opt]# ./untildemo.sh
和为1275
3.shell函数
3.1shell函数的特点
将命令的序列按格式写在一起
可方便重复使用的命令系列
3.2shell函数的语法结构
[function] 函数名(){
命令序列
[return x]
}
函数的调用方法
函数名() [参数1] [参数2]
返回值
echo "值" //直接调用
return 状态码 //$? 调用
4.shell涵数的例子
vim shellfunctiondemo1.sh
#!/bin/bash
function aaa(){ //创建函数方法体
echo 'bbb'
return 6 //返回状态码为6
}
aaa //调用aaa函数
chmod +x shellfunctiondemo1.sh //赋予脚本可执行的权限
./shellfunctiondemo1.sh //执行脚本
bbb //输出的结构
echo $? //输出状态码
6
5.说说最近写shell脚本的心得
从开始学shell脚本到现在,大概有4天了,这四天中,我写了很多shell脚本。其实呢,我想说的是,有时候遇到需求时,我们要冷静分析,从需求入手。然后就是不要把学其他语言的思维固定在那一方面。其次就是,shell脚本需要练习,不能长时间不练,勤能补拙,努力学习。下面就说说我今天在写脚本中遇到的问题吧。
今天呢,老师上课讲了shell函数和调用函数,今天一整个下午都在处理和解决这方面的问题。出错的原因就是我学过其他语言,对函数这一块有一种根深蒂固的思维就是函数写完了,就得需要调用,才能实现,比如Java、Python等等。这就导致了今天遇到的问题:我在写完函数后,下意识的就在下一行调用了,然后怎么测试都不成功,后来看了别人的代码,一下就解决了这个问题。我还是拿例子来说吧。
vim functiontest.sh
#!/bin/bash
function servicectl(){
//判断输入的是否有格式错误
if [ $# -lt 2 ]
then
echo "Usage:`basename $0` <services> [<funcbuttons>]"
exit 0
fi
//判断服务是否存在
services=`ls /usr/sbin |grep "$1"`
if [ $services = "$1" ]
then
echo "当前的服务是$1存在"
else
echo "当前的服务不存在,请先进行下载。"
fi
//测试当前系统的型号及版本
xitong=`cat /etc/centos-release|awk '{print $1}'`
banben=`cat /etc/centos-release|awk '{print $4}'|awk -F\. '{print $1}'`
if [ $xitong = "CentOS" ] && [ $banben = "7" ]
then
echo "当前的系统版本为:$xitong $banben支持servicectl服务"
else
echo "当前的系统版本为:$xitong $banben不支持servicectl服务"
fi
//匹配服务是否开启
case $2 in
start)
service $1 $2
;;
stop)
service $1 $2
;;
restart)
service $1 $2
;;
*)
echo "无法识别的命令"
esac
}
//我呢就在这边调用了一下,(servicectl $1 $2)
chmod +x functiontest.sh
source functiontest.sh //如果上面调用的话就会报错退出,然后写入~/.bashrc文件中后就会导致进不去了。这里的代码经测试没有问题。只是说说我的错误在哪儿,并且希望大家不要和我犯同样的错误。