1. 程式人生 > >Shell基礎知識(三)

Shell基礎知識(三)

狀態 bin 區別 eve shell基礎知識 $2 c++ filename 函數的參數

Shell中變量的作用域:
  • 在當前Shell會話中使用,全局變量。
  • 在函數內部使用,局部變量。
  • 可以在其他Shell會話中使用,環境變量。
局部變量: 默認情況下函數內的變量也是全局變量 #!/bin/bash function func() { a=99 }
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}
特殊變量
變量 含義
$0 當前腳本的文件名
$# 傳遞給腳本或者函數的參數個數
$* 傳遞給腳本或者函數的所有參數
$@ 傳遞給腳本或者函數的所有參數。當被雙引號包含時,與上述$*有所不同。
$? 上個命令的退出狀態
$$ 當前Shell的進程ID。對於Shell腳本,就是這些腳本所在的進程ID。
示例,文件名為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 輸出

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" done
echo "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基礎知識(三)