近来学习到linux的shell编程一块,于是学完后想练习一下。本文就是基于一道练习题来记录一下自己遇到的问题以及解决的过程。
首先看题目:
编写shell脚本,要求实现如下功能:当执行一个程序的时候,这个程序会让使用者选择boy或者girl;如果使用者输入B或者b时,就显示:He is a boy;如果使用者输入G或者g时,就显示:She is a girl;如果是除了B/b/G/g以外的其他字符,就显示:I don’t know
。
其实是一道比较简单的题目,但是因为对shell不熟悉,语法错的还是比较多的。我首先想到的就是用if循环来实现,以下是的第一次的代码:
当然赋权限运行后就报语法错误了。这里的错误还是比较明显的几个,首先是 11 行的结尾应该是fi(这个错的真是不该) 然后就是第5 行的if 判断的时候[ ]里面的内容一定要在开头跟结尾加上空格。否则就会报这样的错误
test_1.sh: line 5: [: missing
]’
百度后还是报错,仔细看了看文档才发现,if中的多重判断是有固定格式的
也就是判断逻辑或要使用 -o 选项。于是就有了接下来的脚本
因为一个空格导致还是报错,而且还浪费了不少时间。
原来是代码的第5行“b ” 这里多了一个空格,这个也是输入b却还是判断 i don;t know 的原因。删除空格后就就可以了。最后测试结果如下:
虽然结果实现了,但是还有没有更简便的方法呢?
当然有了,比如用case来判断:
[root@localhost sh]# cat test_1.2.sh
#!bin/bash
echo “please input your sex: boy or girl ”
read a
case $a in
G)
echo "she is a girl" ;;
g)
echo "she is a girl" ;;
B)
echo " he is a boy" ;;
b)
echo " he is a boy" ;;
*)
echo i dont know ;;
esac
注:此处echo输出的内容最好用双引号引起来(虽然官方手册说可以不用双引号,但在本系统centos 6.8 中如果不用双引号引起来的话会报错)
与上面的 if 语句相比,case语句还是简单的多了。以上的就是我在练习shell编程中遇到的问题,这篇博客也是单纯记录一下自己遇到的语法上的问题。