1·Shell編程變量

1)什麼是變量?內存單元,其值可以改變
變量命名規則

1.開頭爲字符或下劃線,名字中間中能有字母、數字和下劃線組成;
2.變量的長度不超過255個字符;
3.變量名在有效的範圍內必須是唯一的; //如再次定義則會替換上一個變量的值
4.在Bash中,變量的默認類型都是字符串型. //即系統把所有值都當作字符串放到變量中,不論這個“字符串”實際上是整數、浮點數等等

變量按照存儲數據常用分類(其他語言):字符串型,整型,浮點型,日期型

2)變量的分類
1.用戶自定義變量 :可以隨意更改
2.環境變量:部分可以更改
3.位置參數變量 //實際就是預定義變量 :系統已經定義完成,不能隨意更改
4.預定義變量:系統已經定義完成,不能隨意更改

3)如何設置用戶自定義變量

1、變量名=變量值 
e.g. x=5 注意,變量名只能是字母、下劃線、數字組成且不能以數字開頭,=號左右不可有空格
2、“”會解析特殊符號,例如$,‘’不會解析特殊符號
3、引用變量:$變量名  例如:$x 
4、所有變量默認的值都是字符串類型,不可做Math運算
5、變量疊加 e.g  y="$x"123  或者 y=${x}123 
6、查看變量 set 會列出系統中所有的變量,包括環境變量和自定義變量
   set -u //設定當調用不存在變量時,會提示錯誤
7、刪除變量 unset 變量名 例如:unset x

4)環境變量
1.環境變量與用戶自定義變量的區別
環境變量是全局變量,用戶自定義變量是局部變量。
用戶自定義變量只在當前的 shell 中生效,環境變量在當前 shell 和這個 shell 的所有子 shell 中生效。
用戶可以自定義環境變量,但對系統生效的環境變量名和變量作用是固定的。

2.用戶自定義環境變量
$ export 變量名=變量值
或
$ 變量名=變量值
$ export 變量名

3.查看環境變量
$ set 查看所有變量
$ env 查看環境變量

4.刪除環境變量
$ unset 環境名

5.常用的環境變量
HOSTNAME:主機名
SHELL:當前的 shell
TERM:終端環境
HISTSIZE:歷史命令條數
SSH_CLIENT:當前操作環境是用 ssh 連接的,這裏記錄客戶端 ip
SSH_TTY:ssh 連接的終端是 pts/1
USER:當前登錄的用戶
PATH:系統搜索命令的路徑

要想直接通過腳本名執行自己的腳本:
(1)將腳本拷貝至 PATH 中的任意目錄下(不建議這樣做),例如:
$ cp hello.sh /bin/
(2)將腳本所在目錄添加到 PATH 變量中,例如:
$ PATH="$PATH":/root/sh 但系統重啓後失效
PS1:命令提示符設置
\d:顯示日期,格式爲"星期 月 日"
\H:顯示完整的主機名
\t:顯示 24 小時制時間,格式爲"HH:MM:SS"
\A:顯示 24 小時制時間,格式爲"HH:MM"
\u:顯示當前用戶名
\w:顯示當前所在目錄的完整名稱
\W:顯示當前所在目錄的最後一個目錄
\$:提示符。root 用戶爲"#",普通用戶爲"$"

5)語系變量
就是當前支持的語言

當前語系查詢:locale        //直接生效的是LANG變量(默認語系)  LC_ALL:定義整體語系(不常用)

echo $LANG    //當前語系環境
echo $LC_ALL  //整體語系環境

locale -a | more 查看Linux支持的所有語系環境

cat /etc/sysconfig/i18n  //下次開機以後的系統環境

LANG=zh_CN.UTF-8  //切換成中文

6)位置參數變量
1.位置參數變量
nn 0 代表命令本身,1 9 代表第一到第九個參數,十以上的參數需要用大括號包含,如 10 *:這個變量代表命令行中所有的參數, @:這個變量也代表命令行中所有的參數,不過 @ #:這個變量代表命令行中所有參數的個數。

2.例子1:

#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2)) 
#變量 sum 的和是 num1 加 num2
echo $sum 
#打印變量 sum 的值

3.例子2

#!/bin/bash
echo "A total of $# parameters"
使用 $# 代表所有參數的個數
echo "The parameters is:$*"
使用 $* 代表所有的參數
echo "The parameters is:$@"
使用 $@ 代表所有的參數
4.例子3:$* 與 $@ 的區別
#!/bin/bash
for i in "$*"
# $* 中所有參數看成是一個整體,所以這個 for 循環只會循環一次
do
  echo "The parameters is:$i"
done

for y in "$@"
# $@ 中每個參數都看成是獨立的,所以 $@ 中有幾個參數,就會循環幾次
do
  echo "Parameter:$y"
done

7)預定義變量

程序執行的返回值:

$? :最後一次執行命令的返回狀態,如果正確執行,則返回0;
            如果返回爲非零(具體數值由命令決定),則上一條命令執行不正確


執行完一條命令之後,立馬敲入echo $?,可得到返回值。例如:ls   執行之後,再敲入echo $?,可以得到0

前門說到的邏輯或:|| -->ls  ||  echo yes ;前面一條語句正確執行,才執行後一條語句。這裏就是通過執行命令的返回值來判斷的
    邏輯與:&& -->  ls qwe  && echo no  也是同樣的道理

$$:返回當前進程的PID號;
$!:返回後臺的進程PID號;

可以通過一個簡單的shell來展示一下:
sl.sh
#!/bin/bash
ehco "dang qian de PID: $$"

find / hello.sh &
echo "hou tai de PID: $!"

chmod 755 sl.sh,然後再執行:./sl.sh;可以得到當前的測試的結果

read -n
read -p “please input name ” name #-p表示輸出提示信息 read [選項] 變量名
read -t 30 #-t 表示等待時間單位爲秒 -t 30 表示30秒,若30秒後沒有輸入數據終止執行腳本
read -s #隱藏信息
echo -e “\n” 換行符

read.sh:
    #!/bin/bash
    read -p "please input your name:" -t 30 name
    #等下輸入,如果超過30秒不輸入,就終止當前命令
    echo $name

    read -p "please input your password:" -s  pwd
    #輸入的值是隱藏的,看不見的,但是在sh裏面還是可以獲取到的,並且輸出的
    echo -e "/n"
    echo $pwd

    read -p "please input your sex [M/F]:" -n 1 sex
    #意思就是隻能輸入一個字符,且輸入之後立馬執行
    echo -e "/n"
    echo  $sex
chmod 755 read.sh---> ./read.sh
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章