shell用法

  1. 在shell文件內部定義函數並引用:
    代碼如下:
 [~/shell/function]# cat factorial.sh 
 #!/bin/bash
 function factorial
 {
 factorial=1
 for (( i=1;i <= $1;i++ ))
         do
         factorial=$[ $factorial * $i ]
         done
 echo $1的階乘是:$factorial
 }
 echo '程序名':$0,用於求階乘
factorial $1
 [~/shell/function]# ./factorial.sh 10



程序名:./factorial.sh,用於求階乘
10的階乘是:3628800

2.返回值

函數返回碼是指函數最後一條命令的狀態碼,可以用於函數返回值
使用return命令手動指定返回值:
代碼如下:

 [~/shell/function]# cat return.sh 
 #!/bin/bash
 function fun1 {
   read -p "enter a: " a
   echo -n "print 2a: "
   return $[ $a * 2 ]
 }
 fun1
 echo "return value $?"
 [~/shell/function]# ./return.sh 
 enter a: 100
 print 2a: return value 200

由於shell狀態碼最大是255,所以當返回值大於255時會出錯。

代碼如下:

 [~/shell/function]# ./return.sh 
 enter a: 200
 print 2a: return value 144

3.函數輸出

爲了返回大於255的數、浮點數和字符串值,最好用函數輸出到變量:

代碼如下:

 [~/shell/function]# cat ./fun_out.sh 
 #!/bin/bash
 function fun2 {
   read -p "enter a: " a
   echo -n "print 2a: "
   echo $[ $a * 2 ]
 }
 result=`fun2`
 echo "return value $result"
 [~/shell/function]# ./fun_out.sh     
 enter a: 400
 return value print 2a: 800

4.向函數傳遞參數(使用位置參數):
代碼如下:


 [~/shell/function]# cat ./parameter.sh 
 #!/bin/bash
 if [ $# -ne 3 ]
 then
     echo "usage: $0 a b c"
     exit
 fi
 fun3() {
     echo $[ $1 * $2 * $3 ]
 }
 result=`fun3 $1 $2 $3`
 echo the result is $result
 [~/shell/function]# ./parameter.sh  1 2 3
 the result is 6
 [~/shell/function]# ./parameter.sh  1 2
 usage: ./parameter.sh a b c

5.全局變量與局部變量

默認條件下,在函數和shell主體中建立的變量都是全局變量,可以相互引用,當shell主體部分與函數部分擁有名字相同的變量時,可能會相互影響,例如:
代碼如下:


 [~/shell/function]# cat ./variable.sh    
 #!/bin/bash
 if [ $# -ne 3 ]
 then
     echo "usage: $0 a b c"
     exit
 fi
 temp=5
 value=6
 echo temp is: $temp
 echo value is: $value
 fun3() {
     temp=`echo "scale=3;$1*$2*$3" | bc -ql`   
     result=$temp
 }
 fun3 $1 $2 $3
 echo "the result is $result"
 if [ `echo "$temp > $value" | bc -ql` -ne 0 ]
 then 
     echo "temp is larger"
 else
     echo "temp is still smaller"
 fi
 [~/shell/function]# ./variable.sh  12 3 2
 temp is: 5
 value is: 6
 the result is 72
 temp is larger

在這種情況下,在函數內部最好使用局部變量,消除影響。
代碼如下:

 [~/shell/function]# cat ./variable.sh 
 #!/bin/bash
 if [ $# -ne 3 ]
 then
     echo "usage: $0 a b c"
     exit
 fi
 temp=5
 value=6
 echo temp is: $temp
 echo value is: $value
 fun3() {
     local temp=`echo "scale=3;$1*$2*$3" | bc -ql`   
     result=$temp
 }
 fun3 $1 $2 $3
 echo "the result is $result"
 if [ `echo "$temp > $value" | bc -ql` -ne 0 ]
 then 
     echo "temp is larger"
 else
     echo "temp is still smaller"
 fi
 [~/shell/function]# ./variable.sh  12 3 2
 temp is: 5
 value is: 6
 the result is 72
 temp is still smaller

6.向函數傳遞數組變量:
代碼如下:


 [~/shell/function]# cat array.sh 
 #!/bin/bash
 a=(11 12 13 14 15)
 echo ${a[*]}
 function array(){
   echo parameters : "$@" 
   local factorial=1
   for value in "$@"
   do
     factorial=$[ $factorial * $value ]
   done
   echo $factorial
 }
 array ${a[*]}
 [~/shell/function]# ./array.sh 
 11 12 13 14 15
 parameters : 11 12 13 14 15
 360360

7.函數返回數組變量
代碼如下:

 [~/shell/function]# cat array1.sh 
 #!/bin/bash
 a=(11 12 13 14 15)
 function array(){
   echo parameters : "$@" 
   local newarray=(`echo "$@"`)
   local element="$#"
   local i
   for (( i = 0; i < $element; i++ ))
   {
     newarray[$i]=$[ ${newarray[$i]} * 2 ]    
   }
   echo  new value:${newarray[*]}
 }
 result=`array ${a[*]}`
 echo ${result[*]}
 [~/shell/function]# ./array1.sh 
 parameters : 11 12 13 14 15 new value:22 24 26 28 30
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章