shell编程--基本格式,基本语法,运算符,expr,(()),$[]
02/shell編程
Shell是用戶與內核進行交互操作的一種接口,目前最流行的Shell稱為bash Shell
Shell也是一門編程語言<解釋型的編程語言>,即shell腳本<就是在用linux的shell命令編程>
一個系統可以存在多個shell,可以通過cat /etc/shells命令查看系統中安裝的shell,不同的shell可能支持的命令語法是不相同的
2.1 基本格式
代碼寫在普通文本文件中,通常以 .sh為后綴名
vi hello.sh
#!/bin/bash??? ## 表示用哪一種shell解析器來解析執行我們的這個腳本程序 echo "hello world"?? ##? 注釋也可以寫在這里 ## 這是一行注釋 |
?
執行腳本
sh hello.sh
?
或給腳本添加x權限,直接執行
chmod 755 hello.sh
./hello.sh
?
?
?
2.2 基本語法
2.2.1 系統變量
Linux Shell中的變量分為“系統變量”和“用戶自定義變量”
可以通過set命令查看系統變量
系統變量:$HOME、$PWD、$SHELL、$USER等等
?
2.2.2 自定義變量
1、語法
變量=值 (例如STR=abc)
等號兩側不能有空格
變量名稱一般習慣為大寫
使用變量: $arg
雙引號和單引號有區別,
???? 雙引號僅將空格脫意,
???? 單引號會將變量引用比如$param脫意
?
2、示例
STR="hello world"
A=9
echo $A
echo $STR
如果想打印 hello worlds isgreater? 怎么辦?
echo $STRs is greate 行嗎?
不行,正確寫法是:
echo ${STR}s is greate
?
unset A 撤銷變量 A
readonly B=2 聲明靜態的變量 B=2,不能 unset
?
export? A?? #可把變量提升為當前shell進程中的全局環境變量,可供其他子shell程序使用
注意理解export:
[root@shizhan01 scripts]# vi a.sh #!/bin/bash a="a in a.sh" echo $a /root/scripts/b.sh |
?
[root@shizhan01 scripts]# vi b.sh #!/bin/bash b="b in b.sh" echo $b echo $a |
?
然后執行? ./a.sh ,會發現 b腳本中并沒有把a腳本中定義的a變量打印出來
?
如果要在b中打印出a腳本的變量a,需要在a腳本中把變量a做export定義
此時,a變量就成了a.sh腳本所在bash進程的全局變量,該進程的所有子進程都能訪問到變量a
?
?
另一種方式:
如果在a.sh腳本中用如下方式調用b.sh
.? ./b.sh??? ## 注意:重點關注最前面那個 “.”號 |
或者
source ./b.sh?? ## |
則,b.sh就在a.sh所在的bash進程空間中運行
?
?
總結:
1、a.sh中直接調用b.sh,會讓b.sh在a所在的bash進程的“子進程”空間中執行
2、而子進程空間只能訪問父進程中用export定義的變量
3、一個shell進程無法將自己定義的變量提升到父進程空間中去
4、“.”號執行腳本時,會讓腳本在調用者所在的shell進程空間中執行
?
?
3、反引號賦值
A=`ls -la`??? ## 反引號,運行里面的命令,并把結果返回給變量A
A=$(ls -la)?? ## 等價于反引號
?
?
4、特殊變量
$??表示上一個命令退出的狀態碼
$$?表示當前進程編號
$0 表示當前腳本名稱
$n 表示n位置的輸入參數(n代表數字,n>=1)
$# ? 表示參數的個數,常用于循環
$*和$@ 都表示參數列表?
?
?
注:$*與$@區別
$* 和 $@ 都表示傳遞給函數或腳本的所有參數
ü? 不被雙引號" "包含時——
$* 和 $@ 都以$1? $2? … $n 的形式組成參數列表
ü? 當它們被雙引號" "包含時——
"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式組成一個整串;
"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式組成一個參數列表
?
?
2.3 運算符
2.3.1 算數運算
1、用expr
格式 expr m + n 或$((m+n)) 注意expr運算符間要有空格
例如計算(2+3 )×4 的值
1 .分步計算
???????? S=`expr 2 + 3`
???????? expr $S \* 4?????? ##??*號需要轉義
2.一步完成計算
???????? expr`expr 2 + 3 ` \* 4
???????? echo`expr \`expr 2 + 3\` \* 4`
?
2、用(())
((1+2))
(((2+3)*4))
count=1
((count++))
echo $count
?
但是要想取到運算結果,需要用$引用
a=$((1+2))
?
3、用$[]
a=$[1+2]
echo $a
?
?
總結
以上是生活随笔為你收集整理的shell编程--基本格式,基本语法,运算符,expr,(()),$[]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: i类卡和ii类卡区别
- 下一篇: 美原油开盘收盘时间