shell程式設計
例項:
#! /bin/bash
x=123
let"x += 1"
echo
"x = $x"
echo
# 輸出空行
y=$echo
"y = $y"
declare -i y
echo
"y = $y"
let"y += 1"
# 遇到含有非數值的字串,字串轉換為整數0
echo
"y = $y"
echo
z=abc22
echo
"z = $z"
m=$echo
"m = $m"
let"m += 1"
echo
"m = $m"
echo
# 空變數或者空串轉換為整數都為0
n=""
echo
"n = $n"
let"n += 1"
echo
"n = $n"
echo
echo
"p = $p"
let"p += 1"
echo
"p = $p"
可以直接使用變數來定義變數,例如:
#! /bin/bash
a=1b="hello world"
使用declare來宣告變數,基本語法:
declare attribute variable
常用的屬性:
-p:-i:
-r:唯讀變數
-a:陣列
-f:函式
-x:將變數設定為環境變數,這樣隨後的指令碼和程式都可以使用
例項:
#! /bin/bash
x=6/3
echo
"x = $x"
declare -i x
echo
"x = $x"
x=6/3
echo
"x = $x"
x=hello
echo
"x = $x"
# bash並不內建對浮點數的支援
x=3.14
echo
"x = $x"
declare +i x
x=6/3
echo
"x = $x"
x=$[6/3]
echo
"x = $x"
x=$((6/3))
echo
"x = $x"
declare -r x
echo
"x = $x"
x=5echo
"x = $x"
執行結果:
delphi@delphi-vm:~/shell/chapter03$ ./test.sh
6/3
x = 6/3
x = 2
x = 0
./test.sh: 行 13: 3.14: 語法錯誤: 無效的算術運算子 (錯誤符號是 ".14")
x = 0
x = 6/3
x = 2
x = 2
./test.sh: 行 24: x: 唯讀變數
x = 2
例如:
#! /bin/bash
echo
"the current directory is `pwd`"
#! /bin/bash
func
()
v1=100
func
echo
"$v1"
執行結果:
100200
注意:函式內部定義的變數也是全域性變數
全域性變數和區域性變數的區別:
#! /bin/bash
func
()
v1=100
func
echo
"$v1"
執行結果:
100200
100賦值號左右不能夠接空格,否則shell會將其視為命令。
建議使用大括號將變數名進行明確界定,不用簡寫。
例如:echo "$abc"
unset 變數 語句
單引號為全引用,如:
#! /bin/bash
v1="hello"
echo
'world,$v1'
輸出:world,$v1
有兩種語法:
例如:
#! /bin/bash
v1='pwd'
echo
'the current directory is $v1'
#! /bin/bash
v1=$(pwd)
echo
'the current directory is $v1'
如:echo \$shell
結果:$shell
和equals基本變數和引用變數
對於 如果作用於基本資料型別的變數,則直接比較其儲存的 值 是否相等 如果作用於引用型別的變數,則比較的是所指向的物件的位址 對於equals方法,注意 equals方法不能作用於基本資料型別的變數,因為基本資料型別是特殊的,沒有整合equals方法 如果沒有對equals方法進行重寫,則比較的是引...
c 返回變數和返回變數引用
int at int at 上面兩個函式,第乙個返回值是int的引用int 第二個返回值是int,二者的區別是什麼呢?我們先用乙個語句 const int a mymay.at 來分別呼叫一次上面兩個函式,然後看組合語言的結果。反彙編結果 1 int at 2 5600bb6830 push ebp...
shell變數賦值和引用
變數賦值 變數名 值 注意 給變數賦值的時候,不能在 兩邊留空格 變數引用 只需在變數名前面加乙個 有時候變數名可能會和其它文字混淆,需要在變數名之間加上花括號 num 2 echo this is the nd 需要注意shell的預設賦值是字串賦值,例如 var 1 var var 1 echo...