if语句
两种 格式
1)
# 一个条件判断,分成功进行与失败进行 (else)
if [ 条件判断式 ]; then
当条件判断式成立时,可以进行的指令工作内容;
else
当条件判断式不成立时,可以进行的指令工作内容;
fi
2)
# 多个条件判断 (if ... elif ... elif ... else) 分多种不同情况执行
if [ 条件判断式一 ]; then
当条件判断式一成立时,可以进行的指令工作内容;
elif [ 条件判断式二 ]; then
当条件判断式二成立时,可以进行的指令工作内容;
else
当条件判断式一与二均不成立时,可以进行的指令工作内容;
fi
要求
1. 判断 $1 是否为 hello,如果是的话,就显示 “Hello, how are you ?”;
2. 如果没有加任何参数,就提示使用者必须要使用的参数下达法;
3. 而如果加入的参数不是 hello ,就提醒使用者仅能使用 hello 为参数。
鸟哥写的 and 我写的 两种实现方式
鸟哥写的
[dmtsai@study bin]$ vim hello-2.sh
if [ "${1}" == "hello" ]; then
echo "Hello, how are you ?"
elif [ "${1}" == "" ]; then
echo "You MUST input parameters, ex> {${0} someword}"
else
echo "The only parameter is 'hello', ex> {${0} hello}"
fi
---------------我写的-------------------
#/bin/bash
if [ "${1}" == "" ] ;
then
echo "must input canshu"
exit 3
else
if [ "${1}" == "hello" ];
then
echo "hello,how are you?"
exit 1
else
echo "just can input hello"
exit 2
fi
fi
case 语句(case情况)
case $变量名称 in <==关键字为 case ,还有变量前有钱字号
"第一个变量内容") <==每个变量内容建议用双引号括起来,关键字则为小括号 )
程序段
;; <==每个类别结尾使用两个连续的分号来处理!
"第二个变量内容")
程序段
;;
*) <==最后一个变量内容都会用 * 来代表所有其他值
不包含第一个变量内容与第二个变量内容的其他程序执行段
exit 1
;;
esac <==最终的 case 结尾!“反过来写”思考一下!
接着上遍的例子 使用case语句 更简洁
、
[dmtsai@study bin]$ vim hello-3.sh
case ${1} in
"hello")
echo "Hello, how are you ?"
;;
"")
echo "You MUST input parameters, ex> {${0} someword}"
;;
*) # 其实就相当于万用字符,0~无穷多个任意字符之意!
echo "Usage ${0} {hello}"
;;
esac
他不仅可以 使用固定的变量还可以使用你输入的 参数 这样使用 这样使用的话就可以使用的输入的参数来进行选择
[dmtsai@study bin]$ vim show123.sh
echo "This program will print your selection !"
read -p "Input your choice: " choice
case ${choice} in
"one")
echo "Your choice is ONE"
;;
"two")
echo "Your choice is TWO"
;;
"three")
echo "Your choice is THREE"
;;
*)
echo "Us
利用function(函数)功能 (了解就好 使用很少)
什么是“函数 (function)”功能啊?简单的说,其实, 函数可以在 shell script 当中
做出一个类似自订执行指令的东西,最大的功能是, 可以简化我们很多的程序码~举例
来说,上面的 show123.sh 当中,每个输入结果 one, two, three 其实输出的内容都一样啊~
那么我就可以使用 function 来简化了! function 的语法是这样的:
tion fname() {
程序段
}
那个 fname 就是我们的自订的执行指令名称~而程序段就是我们要他执行的内容
了。 要注意的是,因为 shell script 的执行方式是由上而下,由左而右, 因此在 shell script
当中的 function 的设置一定要在程序的最前面, 这样才能够在执行时被找到可用的程序
段喔 (这一点与传统程序语言差异相当大!初次接触的朋友要小心!)! 好~我们将
show123.sh 改写一下,自订一个名为 printit 的函数来使用喔:
[dmtsai@study bin]$ vim show123-2.sh
function printit(){
echo -n "Your choice is " # 加上 -n 可以不断行继续在同一行显示
}
echo "This program will print your selection !"
case ${1} in
"one")
printit; echo ${1} | tr 'a-z' 'A-Z' # 将参数做大小写转换!
;;
"two")
printit; echo ${1} | tr 'a-z' 'A-Z'
;;
"three")
printit; echo ${1} | tr 'a-z' 'A-Z'
;;
*)
echo "Usage ${0} {one|two|three}"
;;
esac
以上面的例子来说,鸟哥做了一个函数名称为 printit ,所以,当我在后续的程序
段里面, 只要执行 printit 的话,就表示我的 shell script 要去执行“ function printit …. ” 里面
的那几个程序段落啰!当然啰,上面这个例子举得太简单了,所以你不会觉得 function 有
什么好厉害的, 不过,如果某些程序码一再地在 script 当中重复时,这个 function 可就重
要的多啰~ 不但可以简化程序码,而且可以做成类似“模块”的玩意儿,真的很棒啦
Tips建议读者可以使用类似 vim 的编辑器到 /etc/init.d/ 目录下去查阅一下
你所看到的文件, 并且自行追踪一下每个文件的执行情况,相信会更
有心得!
另外, function 也是拥有内置变量的~他的内置变量与 shell script 很类似, 函数
名称代表示 $0 ,而后续接的变量也是以 $1, $2… 来取代的~ 这里很容易搞错喔~因为“
function fname() { 程序段 } ”内的 $0, $1… 等等与 shell script 的 $0 是不同的。以上面
show123-2.sh 来说,假如我下达:“ sh show123-2.sh one ” 这表示在 shell script 内的 $1 为
“one” 这个字串。但是在 printit() 内的 $1 则与这个 one 无关。 我们将上面的例子再次
的改写一下,让你更清楚!
[dmtsai@study bin]$ vim show123-3.sh
function printit(){
echo "Your choice is ${1}" # 这个 $1 必须要参考下面指令的下达
}
echo "This program will print your selection !"
case ${1} in
"one")
printit 1 # 请注意, printit 指令后面还有接参数!
;;
"two")
printit 2
;;
"three")
printit 3
;;
*)
echo "Usage ${0} {one|two|three}"
;;
esac
在上面的例子当中,如果你输入“ sh show123-3.sh one ”就会出现“ Your choice is 1
”的字样~ 为什么是 1 呢?因为在程序段落当中,我们是写了“ printit 1 ”那个 1 就会成为
function 当中的 $1 喔~ 这样是否理解呢? function 本身其实比较困难一点,如果你还想
要进行其他的撰写的话。 不过,我们仅是想要更加了解 shell script 而已,所以,这里看
看即可~了解原理就好啰~ ^_