Shell基礎知識(三)
阿新 • • 發佈:2019-01-27
狀態 bin 區別 eve shell基礎知識 $2 c++ filename 函數的參數 Shell中變量的作用域:
func
echo $a 輸出 >> 99 為了讓全局變量變成局部變量 #!/bin/bash function func() { local a=99 }
func
echo $a 輸出為空,說明此時變量a是局部變量 環境變量: 在父Shell中定義的變量,在子Shell中可以調用。
Shell位置參數
1) 給腳本傳遞位置參數
在運行shell腳本的時候可以帶入一些位置參數,在腳本中$n來接收參數的值。如下:
#!/bin/bash
echo "language: $1"
echo "username: $2"
運行:
>> bash filename.sh Chinese mocun
輸出:
>> language: Chinese
>> username: mocun
2) 給函數傳遞位置參數
#!/bin/bash
function func() {
echo "language: $1"
echo "username: $2"
}
func c++ mocun 這時就不能在運行的時候通過命令傳入了,直接在腳本中調用函數的同時給參數就行。 輸出: >> language: c++ >> username: mocun 如果參數過多,超過10個了,那麽就需要用${n}來接收,幫助解釋器明確參數的邊界,如:${11}
特殊變量
示例,文件名為test.sh:
#!/bin/bash
echo "Process ID: $$"
echo "File Name: $0"
echo "First Parameter: $1"
echo "Second Parameter: $2"
echo "All Parameters 1: $@"
echo "All Parameters 2: $*"
echo "Total: $#"
運行命令:
>> bash test.sh yinzm mocun
輸出
echo "print each param from \"\$@\"" for var in "$@" do echo "$var" done 運行: >> bash filename.sh a b c 輸出:
- 在當前Shell會話中使用,全局變量。
- 在函數內部使用,局部變量。
- 可以在其他Shell會話中使用,環境變量。
func
echo $a 輸出 >> 99 為了讓全局變量變成局部變量 #!/bin/bash function func() { local a=99 }
func
echo $a 輸出為空,說明此時變量a是局部變量 環境變量: 在父Shell中定義的變量,在子Shell中可以調用。
Shell位置參數
func c++ mocun 這時就不能在運行的時候通過命令傳入了,直接在腳本中調用函數的同時給參數就行。 輸出: >> language: c++ >> username: mocun 如果參數過多,超過10個了,那麽就需要用${n}來接收,幫助解釋器明確參數的邊界,如:${11}
特殊變量
變量 | 含義 |
$0 | 當前腳本的文件名 |
$# | 傳遞給腳本或者函數的參數個數 |
$* | 傳遞給腳本或者函數的所有參數 |
$@ | 傳遞給腳本或者函數的所有參數。當被雙引號包含時,與上述$*有所不同。 |
$? | 上個命令的退出狀態 |
$$ | 當前Shell的進程ID。對於Shell腳本,就是這些腳本所在的進程ID。 |
Process ID: 39817
File Name: seventh.sh
First Parameter: yinzm
Second Parameter: mocun
All Parameters 1: yinzm mocun
All Parameters 2: yinzm mocun
Total: 2
$*與$@的區別 簡單說,當兩個參數沒有被雙引號包含時是一模一樣的效果,都是接收若幹個獨立的參數。但是當被雙引號包含時,$*會將得到的所有參數拼在一起,但是$@仍然是若幹個獨立的參數。 示例,文件名filename.sh: #!/bin/bash echo "print each param from \"\$*\"" for var in "$*" do echo "$var" doneecho "print each param from \"\$@\"" for var in "$@" do echo "$var" done 運行: >> bash filename.sh a b c 輸出:
print each param from "$*"
a b c
print each param from "$@"
a
b
c
$?的作用 1.獲取上一個命令的退出狀態 2.獲取函數的返回值
Shell基礎知識(三)