- 1、執(zhí)行 “vim test.sh” 創(chuàng)建一個新的shell腳本隆圆,腳本 test.sh 的內(nèi)容如下:
#!/bin/sh
name=$1 // 將第一個參數(shù)賦值給 name
echo "the ${name} are great man!" // ${name} 表示取出name對應的參數(shù)
- 2漱挚、給新創(chuàng)建的test.sh的腳本賦值 執(zhí)行權(quán)限,命令:
chmod +x test.sh
- 3渺氧、執(zhí)行命令
sh test.sh "zhangsan"
,可以在終端看到結(jié)果:“the zhangsan are great man旨涝!”
-
說明:
“name=$1” 中 $1 為系統(tǒng)提供的參數(shù)位置,$0
代表程序的全路勁名稱(~/Desktop.test.sh)侣背,[$1,$2... ...] 從1 白华、2 開始為傳入的參數(shù),linux 除了提供了位置參數(shù)還提供了內(nèi)置參數(shù)贩耐,所有內(nèi)置參數(shù)如下:- $0 ---> 當前腳本文件全路徑名參數(shù)
- $n ---> 傳遞腳本或函數(shù)的參數(shù)弧腥,n 是一個數(shù)字,表示第幾個參數(shù)潮太,$1 是第一個管搪,$2 是第二個 依次類推... ...
- $# --->傳遞給腳本或函數(shù)的參數(shù)個數(shù)
- $* --->傳遞給腳本或函數(shù)的參數(shù)個數(shù)
// 遍歷參數(shù)
for var in $*
do
echo "name ${var}"
done
// 一次性獲取所有參數(shù)
name = $*
echo "name ${name}"
- $@ --->傳遞給腳本或函數(shù)的參數(shù)個數(shù)
// 遍歷參數(shù)
for var in $@
do
echo "name ${var}"
done
// 一次性獲取所有參數(shù)
name = $@
echo "name ${name}"
二、sh 腳本語法基礎(chǔ)
1铡买、開頭
腳本程序必須以#!/bin/sh
開頭更鲁,且必須寫在腳本文件的第一行。
#!
用來告訴系統(tǒng)奇钞,他后面的參數(shù)是用來執(zhí)行該文件的程序澡为,這個程序中我們使用/bin/sh
來執(zhí)行程序。
當編寫完腳本文件后景埃,如果要執(zhí)行該腳本文件媒至,就必須使其可執(zhí)行顶别,可以使用命令來修改腳本文件的權(quán)限,如:chmod +x abc.sh
, 這樣就可以使用命令:sh abc.sh
或者bash abc.sh
或者source abc.sh
亦或. abc.sh
來執(zhí)行這個腳本文件塘慕。2筋夏、注釋
在進行Shell腳本時蒂胞,以#
開頭的句子表示注釋图呢,直到這一行結(jié)束。3骗随、變量
在Shell編程中蛤织,所有的變量都由字符串組成,并且不需要對變量進行聲明鸿染,要賦值給一個變量可以這么寫:
#!/bin/sh
#對變量賦值
a = "hello world"
#打印變量
echo $a
有時候變量名很容易與其它的文字混淆指蚜,比如:
num=2
echo "this is the $numnd"
這并不會打印出this is the 2nd
,因為shell 去搜索變量numnd的值,但是這個變量并沒有賦值涨椒,我們可以使用{}
來告訴shell 我們要打印的num變量摊鸡,如下:
num=2
echo "this is the ${num}nd"
這樣就可以打印出我們預期結(jié)果:this is the 2nd
4、環(huán)境變量
由export
關(guān)鍵字處理過的變量叫做環(huán)境變量蚕冬,我們不對環(huán)境變量進行討論免猾,因為通常情況下僅僅是在登錄腳本中使用環(huán)境變量5、Shell命令和流程控制
在shell腳本中可以使用3類命令:
1- unix 命令