腳本傳參
使用$0代表腳本的相對路徑
#!/bin/bash
filename=$(basename $0)
echo $filename
echo $0
echo $1
echo $2
echo $3
給腳本賦值:
./14.sh 7 10 9
其中14.sh是腳本的名稱,7,10,9分別給變量1舔箭,2无虚,3賦值,執(zhí)行后的輸出結(jié)果為:
14.sh
./14.sh
7
10
9
使用@來遍歷所有參數(shù):
#!/bin/bash
filename=$(basename $0)
echo $filename
echo $0
echo $1
echo $2
echo $3
echo "參數(shù)的總數(shù):$#"
for param in "$@";
do
echo "param:$param"
done
給腳本賦值:
./14.sh 7 10 9
執(zhí)行后的輸出結(jié)果為:
14.sh
./14.sh
7
10
9
參數(shù)的總數(shù):3
param:7
param:10
param:9
輸入輸出重定向
標準輸入輸出:
0 STDIN 標準輸入
1 STDOUT 標準輸出
2 STDERR 標準錯誤
1.如下,默認是輸出到控制臺:
#!/bin/bash
echo "yy"
echo "zz"
要將上述輸出到test文件中郁季,可以在控制臺輸入:
./15.sh 1>test
這樣就可以將輸出重定向到test文件中冷溃,我們可以驗證一下钱磅,控制臺輸入:
cat test
可以看見test中:
yy
zz
這表示已經(jīng)將輸出重定向到test文件中了,但是這樣并不夠似枕,我們想要在shell腳本中盖淡,將每個輸出都重定向到一個文件中,顯然在控制臺輸入這樣的命令是不夠的凿歼,我們需要統(tǒng)一處理:
#!/bin/bash
exec 1>test2
echo "yy"
echo "zz"
其中exec 1>test2就是做這樣的處理的褪迟,將腳本中所有的輸出重定向到test2文件中,在控制臺輸入./15.sh
答憔,即可實現(xiàn)重定向牵咙,我們可以同上驗證。
2.將標準錯誤輸出到文件中:
#!/bin/bash
exec 1> test3
exec 2> test4
echo "yy"
echo "zz"
ls -a "./f"
這里沒有f文件攀唯,所以ls -a "./f"
將會報錯,這里將報錯的內(nèi)容都重定向到test4文件中渴丸。
3.自定義輸出:
#!/bin/bash
exec 1> test3
exec 2> test4
exec 7> test5
echo "yy" >&7
echo "zz"
ls -a "./f"
這里就將yy
自定義輸出到test5文件中侯嘀,注意>&7
之間不能有空格,自定義輸出一般用的很好谱轨,做為了解就行戒幔。
函數(shù)調(diào)用
#!/bin/bash
#第一種方式
function myfun
{
echo "myfun函數(shù)"
}
#第二種方式
myfun()
{
echo "myfun2函數(shù)"
}
myfun
上述存在兩種方式,分別是用function標注和用()去表示函數(shù)myfun土童,兩種方式都可以诗茎,一般我會用第一種方式。這里存在函數(shù)覆蓋的献汗,第二種方式的寫在第一種方式的下面敢订,會覆蓋第一種方式。而第一種方式的寫法又有多種罢吃,如:
function myfun {
echo "myfun函數(shù)"
}
這里myfun
與{
之間存在空格楚午,否則會報錯,還可以這樣寫:
function myfun(){
echo "myfun函數(shù)"
}
函數(shù)傳參尿招、返回值
#!/bin/bash
function myfun
{
echo $[ $1 + $2 ]
}
value=$(myfun 8 5)
echo "value:$value"
執(zhí)行結(jié)果為:
value:13
跨腳本調(diào)用
被調(diào)用的函數(shù)庫腳本18.sh
#!/bin/bash
#函數(shù)庫
function add()
{
echo $[ $1 + $2 ]
}
調(diào)用18.sh的腳本17.sh
#!/bin/bash
#引入 ./18.sh
#source ./18.sh
. ./18.sh
function myfun(){
echo $value
}
value=20
myfun
echo "add value:$(add 10 20)"
其中.
就是source的快捷別名矾柜。