shell編程
shell主要用來簡化管理操作
bash變量
1.什么是變量
變量是計算機內(nèi)存的單元,其中存放的值可以改變衡怀。
變量命名規(guī)則:字母或下劃線開頭装畅,可由字母、數(shù)字和下劃線組成蓝纲。
長度不能超過255個字符阴孟。變量名在有效范圍內(nèi)必須唯一。在bash中税迷,變量的默認(rèn)類型都是字符型永丝。
變量安裝存儲數(shù)據(jù)分類,字符串型箭养、整型慕嚷、浮點型、日期型
變量在“系統(tǒng)內(nèi)”分類:
用戶自定義變量毕泌。即:變量是自定義的喝检。
環(huán)境變量:主要保存和系統(tǒng)操作環(huán)境相關(guān)的數(shù)據(jù)『撤海可自定義挠说,但對系統(tǒng)生效的環(huán)境變量名和變量作用是固定的。
位置參數(shù)變量:主要用來向腳本當(dāng)中傳遞參數(shù)或數(shù)據(jù)愿题。變量名不能自定義损俭,變量作用是固定的。
預(yù)定義變量:是bash中已定義好的變量潘酗,變量名不能自定義杆兵,變量作用固定的。
2.自定義變量
格式:變量名=變量值 注:等號兩側(cè)不能有空格
- x=5 正確的定義
- name = xxxx 錯誤的定義
變量調(diào)用:
echo $變量名
如:echo $x
echo $name
注意:$x+$y 不會做數(shù)值運算
變量疊加:
x=123
x="$x"456 ->123456
x=${x}789 ->123456789
若執(zhí)行 set -u 后仔夺,(前提是變量a不存在)echo $a ,則顯示-bash: a: unbound variable
變量刪除:
unset 變量名
3.環(huán)境變量
環(huán)境變量與用戶自定義變量區(qū)別:
環(huán)境變量是全局變量琐脏,用戶自定義變量是局部變量。
用戶自定義變量只在當(dāng)前的shell中生效缸兔,環(huán)境變量在當(dāng)前shell和該shell的所有子shell中都生效骆膝。
對系統(tǒng)生效的環(huán)境變量名和變量作用是固定的。
設(shè)置環(huán)境變量
export 變量名=變量值
或:變量名=變量值 export 變量名
查看環(huán)境變量
set #查看所有變量
env #查看環(huán)境變量
刪除環(huán)境變量 unset 變量名
常用環(huán)境變量:
HOSTNAME:主機名
SHELL:當(dāng)前的shell
TERM:終端環(huán)境
HISTSIZE:歷史命令條數(shù)
SSH_CLIENT:當(dāng)前操作環(huán)境是用ssh連接的灶体,這里記錄客戶端ip
SSH_TTY:ssh連接的終端時pts/1
USER:當(dāng)前登錄用戶
PATH環(huán)境變量
PATH變量:系統(tǒng)查找命令的路徑
echo $PATH #查看PATH環(huán)境變量
PATH="$PAHT":/root/sh #增加PAHT變量的值
PS1環(huán)境變量:命令提示符設(shè)置
位置參數(shù)
當(dāng)前語系查詢:
locale # 查詢當(dāng)前系統(tǒng)語系
-LANG :定義系統(tǒng)主語系的變量
-LC_ALL:定義整體語系的變量
echo $LANG #查看系統(tǒng)當(dāng)前語系
locale -a | more #查看Linux支持的所有語系
cat /etc/sysconfig/i18n # 查詢系統(tǒng)默認(rèn)語系
linux中文支持阅签,只有正確安裝的中文字體和中文語系
-如果有圖形界面,可以正確支持中文顯示蝎抽。
-如果使用第三方遠(yuǎn)程工具政钟,只要語系設(shè)置正確,可以支持中文顯示樟结。
-如果純字符界面养交,必須使用第三方插件。
位置參數(shù)變量:
$n 作用:n為數(shù)字瓢宦,$0代表命令本身碎连,$1-$9代表第一到第九個參數(shù),十以上的參數(shù)需要用大括號包含驮履,如${10}
$* 作用:代表命令行中所有的參數(shù)鱼辙,$*把所有的參數(shù)看成一個整體廉嚼。
$@ 作用:代表命令行中所有的參數(shù),$@把每個參數(shù)區(qū)分對待
$# 作用:代表命令行中所有參數(shù)的個數(shù)倒戏。
例子:
!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))#變量sum的和是num1+num2
echo $sum # 打印變量sum的值
./canshu1.sh 11 22
$0 $1 $2
預(yù)定義變量
$? 最后一次執(zhí)行的命令的返回狀態(tài)怠噪。若這個變量的值為0,證明上一個命令正確執(zhí)行杜跷。反之傍念,未正確執(zhí)行。
$$ 當(dāng)前進(jìn)程的進(jìn)程號(PID)
$! 后臺運行的最后一個進(jìn)程的進(jìn)程號(PID)
接收鍵盤輸入
read [選項] [變量名]
選項:
-p “提示信息”:在等待read輸入時葛闷,輸出提示信息憋槐。
-t 秒數(shù):read命令會一直等待用戶輸入,可指定等待時間淑趾。
-n 字符數(shù):read命令只接受指定的字符數(shù)秦陋,就會執(zhí)行。
-s:隱藏輸入的數(shù)據(jù)治笨,使用于機密信息的輸入
shell運算符
declare 命令
格式:declare [+/-] [選項] 變量名
-:給變量設(shè)定類型屬性
+:取消變量的類型屬性
-a:將變量聲明為數(shù)組
-i:將變量聲明為整數(shù)型(integer)
-x:將變量聲明為環(huán)境變量
-r:將變量聲明為只讀變量
-p:顯示指定變量的被聲明的類型
1、變量聲明為數(shù)值型
給變量aa和bb賦值
aa=11
bb=22
聲明變量cc的類型是整數(shù)型赤嚼,它的值是aa和bb的和
declare -i cc=$aa+$bb
2旷赖、聲明數(shù)組變量
定義數(shù)組
movie[0]=aaa
movie[1]=bbb
declare -a movie[2]=ccc
查看數(shù)組
echo ${movie}
echo ${movie[2]}
echo ${movie[*]}
3、聲明環(huán)境變量
declare -x test=123
和export作用相識更卒,但export其實是declare命令的作用
4等孵、聲明變量只讀屬性
declare -r test
給test賦予只讀屬性,但是請注意只讀屬性會讓變量不能修改蹂空、不能刪除俯萌,甚至不能取消只讀屬性
5、查詢變量的屬性
declare -p #查詢所有變量的屬性
declare -p 變量名 #查詢指定變量的屬性
數(shù)值運算方式
方式1:declare形式
方式2:
給變量aa和bb賦值
aa=11
bb=22
dd的值是aa和bb的和上枕,注意"+"號左右兩側(cè)必須有空格
dd=$(expr $aa + $bb)
方式3:“$((運算式))” 或 "$[運算式]"
給變量aa和bb賦值
aa=11
bb=22
ff=$(($aa + $bb))
gg=$[$aa + $bb]
運算符說明:同編程語言運算符基本一致咐熙,有優(yōu)先級,可通過小括號來改變辨萍。
變量測試:特殊的形式棋恼,一般不用。如:x=${y-新值}