1. 程式人生 > >【unix學習】shell程式設計—引數、流程控制、算數運算、函式

【unix學習】shell程式設計—引數、流程控制、算數運算、函式

shell引數

符號說明

echo $0
$1-$9 代表引數的位置,1代表第一個引數,,,,
$* 把全部引數當作一個字串形式的引數,"$1 $2 … $n"的形式
[email protected] 把引數當作列表形式,與$*相同,"$1" "$2""$n" 的形式,注意引號的差別。
$# 引數的個數
$$ 執行的當前程序ID號
$? 顯示上一個程序是否執行成功,成功執行返回0,執行不成功返回1
$! 後臺執行的最後一個程序的ID號

$* 與 [email protected] 區別:
相同點:都是引用所有引數。
不同點:只有在雙引號中體現出來。
假設在指令碼執行時寫了三個引數 1
23,,則 " * " 等價於 "1 2 3"(傳遞了一個引數),而 "@" 等價於 "1" "2" "3"(傳遞了三個引數)。

$* 與$@ 區別

for i in "$*"
do
    echo $i
done

#結果#
1 2 3

for i in "[email protected]"
do
    echo $i
done

#結果#
1
2
3

變數賦值

[s14516@gdufs]$name="koo" #賦值之間別有空格
[s14516@gdufs]$echo name
name
[s14516@gdufs]$echo $name
koo

shell指令碼

#! 告訴系統其後路徑所指定的程式即是解釋此指令碼檔案的 Shell 程式。

if語句

#!/bin/bash
read input
if [ $input = "gdufs" ]
then
    echo "right"
else
    echo "wrong"
fi

case語句

#!/bin/bash
hour=`date "+%H"`
case $hour in
[0-8]|19|2[0-3])
        echo "good night"
        ;;
9|1[0-2])
        echo "good morning"
        ;;
1
[3-8]) echo "good afternoon" ;; *) #表示其他情況 esac

迴圈

for name in zhangsan lisi wangwu
do
    echo $name
done

expr 算數表達

1.四則運算

+ - \* / %
這小表示式兩邊需要有空格
[[email protected]]$expr 4 \* 3

2.賦值表示式

[s14516@gdufs]$a=`expr 4 \* 3`
[s14516@gdufs]$echo $a
12

expr只支援整型運算
3.浮點型運算

[s14516@gdufs]$echo  4 \* 3.2 | bc

4.while迴圈

#!/bin/bash
read -p 'please input' n
i=1
while [ $i -le $n ]
do
        echo $i
        i=`expr $i + 1`
done

5.求和

#!/bin/bash
read -p 'please input: ' n
i=1
sum=0
while [ $i -le $n ]
do
        sum=`expr $sum + $i`
        i=`expr $i + 1`
done
echo $sum

shell函式

1.無引數函式

#!bin/bash

greet(){
    echo 'hello'
}

greet

2.有引數函式

#!/bin/bash
greet(){
    echo "hello, $1"  
    ## $1 表示第一個引數,不需要在方法上寫引數
}
read -p 'please input: ' name1 name2
greet $name1
greet $name2