上一篇简单介绍了一些Shell的一些知识。这一篇讲述Shell编程的知识。只要对linux的命令很熟悉,在稍具一些程序语言能力,学习Shell编程是可以速成的。Shell内置的功能与程序控制语句:if,case等都很简单。通过大量动手操作,仔细了解每种语句的用法,相信足可以成为Shell编程高手。
干货送上,先来一段代码例程:(第一行前面的“#”号不是注释, “#!”而且出现在第一行代表通知系统用/bin/sh来执行下面的程序。)
#! /bin/sh
a=5
b=3
echo a=$a
echo b=$b
if (test “$a” = “$b”) then
echoa=b
else
echoa!=b
fi
以“#”开头的行代表注释。字符串前面加”$”代表它是一个变量,如果”$”后面是数字,代表第几个参数。$1代表第一个参数,$2代表第二个参数,$0代表命令本身
参数详细说明
参数 |
说明 |
$i |
代表第i个参数 |
$# |
代表参数个数 |
$* |
代表所有参数 |
$? |
上一个命令的返回值 |
$i例子
#! /bin/sh
echo $#
echo $1
echo $*
shift语句
$i只能提供0到9这10个数据参数,那么超过10个怎么办呢?shift能使引用数移位,如此就可以将引用过的引数移掉,把位置留给下一个引数。
echo $# $*
shift
echo $# $*
以“` `”符号包含的内容不是字符串,而是代表这是一个shell 命令。
echo “today is” `date` 前面是字符,后面`date`表示执行date这个命令。
PDATE=`date` 代表定义一个变量PDATE,将date执行完成输出的结果放入变量 PDATE中。
“expr”是用来取计算的结果。
a=9
b=10
var1=$a+$b
echo $var1
输出结果是”9+10”
“expr”是用来取计算的结果。var1=`expr $a + $b注意:“+”前后都需要有空格
read命令用于从终端或文件读取输入。read命令读取一个输入行,直至遇到换行符。行尾的换行符在读入时将被转换成一个空字符。如果read命令后有变量名,输入内容赋给该变量,如果read命令后未跟变量名,读入的行将被赋值给内置变量REPLY。
下面是read的一个小例子:
#! /bin/sh
read a
read b
var1=`expr $a + $b`
echo $var1
第一种if条件语句。
if (test condition) then
commands
else
commands
fi
if条件语句中test是一个固定关键字,用来判断condition的描述是否正确,正确继续执行下面语句,错误执行else后面语句。fi表示if语句结束。
第二种if条件语句。
if [ -option expr ]; then
commands
else
commands
fi
不同的条件代表不同的判断方式。例如 if [ -r file ];,”[” ”]”里面都要加上空格,”]”后面要加”;”号。
-option说明
option |
说明 |
-d file |
文件存在并且是个目录 |
-e file |
文件存在 |
-r file |
文件存在并且可读 |
-w file |
文件存在并且可写 |
-x file |
文件存在并且可执行 |
第二种if条件语句例子。
#!/bin/sh
if[ -f abc.c ]; then
echo “have abc.c”
else
echo “have not abc.c”
fi
while循环语句。
while[ expr ];
do
commands
done
expr为真的时候,while循环一直下去,直到expr为假。
while程序使用举例:
#!/bin/sh
times=0
while[ "$times" != "5" ];
do
echo $times
times=$[$times + 1]
done
case分支条件语句:
case“string” in
pattern_1)
commands
;;
pattern_2)
commands
;;
*)
commands
;;
esac
当条件语句中的 string等于pattern字符串时执行pattern下面命令。当没有符合条件时,最后执行*)。
case语句举例:
#!/bin/sh
case"$1" in
start)
echo "is start"
;;
stop)
echo "is stop"
;;
*)
echo "is nothing"
esac
for循环语句:
forvarname in list ;
do
commands
done
list可以是一个字符串或数字。for每执行一次循环就将varname指定为list中的一个值,直到list这个数组结束。
for语句举例:
#!/bin/sh
sun=0
fori in 1 2 3 4 5;
do
sum=$[$sum + i]
echo $sum
done
exit语句:
exitcode exit可以让一个shell退出,与C语言的exit函数类似。
shell和C语言一样,可以提供自定义函数
functionfuncname
{
commands
}
使用函数前必须先定义函数。
函数使用举例:
#!/bin/sh
functionfunc
{
echo "function is begin"
}
func
带参数的函数举例
#!/bin/sh
functionfunc
{
echo "function is begin"
a=$1
b=$2
echo `expr $a + $b`
}
func3 5
带参数和返回值的函数举例:
#!/bin/sh
functionfunc
{
echo "function is begin"
a=$1
b=$2
return `expr $a + $b`
}
func3 9
var1=$?
echo$var1