2021-05-12 14:32:11
Shell基礎:變數型別 & 運算子
Shell變數
Shell支援三種型別的變數
- 使用者自定義變數:使用者自定義的變數,變數名以英文字母或下劃線開頭,區分大小寫。
- 位置變數:根據位置傳遞引數給指令碼的變數,預設支援9個位置變數 $1,$2,$3...$9
- 預定義變數: 預定義的特殊變數,只能使用,不能修改
使用者自定義變數
#定義變數:變數名=變數值, 可以使用"常數/其他變數/命令執行結果"賦值
var1='test var'
var2="test variable $var1"
var3=`date`
#單引號中將$就當作$, 不識別$為特殊符號,不能參照起他變數
echo 'the price is $100'
#雙引號中可以通過$來參照變數,但無法解析跳脫符號,要解析跳脫符和字型格式需要在echo命令前加-e 引數
echo "test /n test"
echo -e "test /n test"
#`` 反引號可以執行完其中的指令碼命令然後賦值給相應的變數,如下執行結果會列印出123.sql的結果和當前日期
str=`cat 123.sql`
strdate=`date`
echo "$str $date`
#使用變數:$變數名
echo "$var $var1"
#變數後直接連線字串需要用{}隔開使得變數可識別
echo "測試變數${var}test"
# 清除變數
unset var1
位置變數
新建根據引數執行資料庫命令指令碼
#!/bin/bash
#mysql.sh
conn="/usr/local/mysql/bin/mysql -uroot -p123"
case $1 in
select)
sql="select * from test.user"
;;
delete)
sql="delete from test.user where id =$2"
;;
insert)
sql="insert into test.user(uname,psd) values('$2','$3')"
;;
update)
sql="update test.user set uname='$3', psd='$4' where id='$2'
;;
esac
$conn -e "$sql"
執行指令碼,以空格為分隔符輸入不同個數的引數
#顯示test資料庫下user表的所有資料
./mysql.sh select
#刪除指定id的使用者
./mysql.sh delete 4
#插入新使用者
./mysql.sh insert newuser newpsd
#更新id=2使用者屬性
./mysqlsh update 2 newuser2 newpsd2
預定義變數
Shell指令碼支援四種形式的預定義變數:
- $#: 所有位置引數的個數
- $*: 所有位置引數的內容
- $0: 當前執行的指令碼名(程式或者是進程名)
- $?: 上一條命令執行的狀態,為0代表執行成功,為其他數位(eg:127...)代表執行失敗
!/bin/bash #test pre-defined bash variable echo "當前指令碼的位置引數有${#}個" echo "當前正在執行的指令碼名稱是: $0" if[ [ $? == 0 ] ];then echo "上條命令執行成功" else echo "上條命令執行失敗" fi for i in $*; do echo "位置變數為 $i" done
運算子
Shell是指令碼語言,變數沒有區分型別,程式在實際執行的時候根據上下文做型別判斷,預設的型別是String,如果需要把變數看作Int型別來進行加減乘除運算,需要採用特殊語法。
- $((變數1運算子1變數2運算子2變數3)) : 此種方式用的較多, eg: $((2+3+4)); $((2*3))
- expr 變數1 運算子 變數2 運算子 變數3 :變數和運算子之間一定要用空格隔開,此種方法比較少用, 並且乘法要用轉移*, eg: expr 2 + 3 + 4; expr 2 * 3
Shell常用運算子
- +
- -
- *
- /
- %
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-09/135146.htm
相關文章