首頁 > 軟體

Shell基礎:變數型別 & 運算子

2020-06-16 17:33:37

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


IT145.com E-mail:sddin#qq.com