您的位置:首页 > 运维架构 > Shell

Shell编程

2014-07-25 17:20 393 查看
     上一篇简单介绍了一些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


 

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息