linux中的shell程式設計之變數
shell程式設計主要是為了簡化linux系統管理的。
shell中的變數是一種弱型別的變數,c,java等語言是一種強型別的語言。
linux中的所有的變數預設型別都是字元型別的
零、bash變數的分類
變數型別 | 說明 |
使用者自定義變數 | 使用者自定義的變數 |
環境變數 | 儲存的是和系統操作環境相關的資料 |
位置變數 | 主要是用來向腳本當中傳遞引數或資料的,變數名不能自定義,變數作用是固定的 |
預定義變數 | 是bash中已經定義好的變數 |
一、使用者自定義變數
定義變數:
變數名=變數值 # 如x=200 x=jiecao x="jie cao"(字元之間有空格的,需要加雙引號)
變數的呼叫:
echo $變數名
變數的疊加,直接看下面的例項:
x=123
echo "$x"456 # 方式一推薦使用
echo ${x}789 # 方式二不推薦使用,原因是易記混淆
以上命令的結果如下:(變數疊加常用來為使用者自定義的命令新增系統執行路徑)
變數的檢視
set # 會檢視當前系統下正在執行的所有變數
選項:
-u 如果設定此選項,呼叫未宣告變數時會報錯(預設無任何提示)
其中,第一句命令:echo $y查看了一個不存在的變數y,系統並沒報錯,只是顯示了一個空行,當呼叫set -u命令後,再檢視不存的這個y變數,系統就會出現報錯提示。
變數的刪除:
unset
二、環境變數
環境變數是一種全域性變數,他會存在於所有的shell中(包括父shell和子shell),區域性變數只存在於建立他的那個shell中,在其子shell中看不到該變數。
設定環境變數:
export 變數名=變數值
或
變數名=變數值
export 變數名
通過pstree(檢視程序樹命令,發現此時系統有兩個shell,是因為上一個過程執行了bash命令,進入了一個子shell,並且名字為bash的子shell,退出當前shell可以用exit命令,當系統中本身就只有一個shell在執行,如果在xshell中用exit命令,(xshell中使用exit命令會使xshell與linux虛擬機器斷開連線))
檢視環境變數的辦法:
env命令
刪除環境變數的方法與使用者自定義的變數的方法沒有什麼區別
常用的環境變數:
HOSTNAME | 主機名 |
SHELL | 當前的shell |
TERM | 終端環境 |
HISTSIZE | 歷史命令條數 |
SSH_CLIENT | 當前操作環境是用ssh協議連線的,這裡記錄客戶端ip |
SSH_TTY | ssh連線的終端是pts/1 |
USER | 當前登入的使用者 |
linux新增PATH路徑的方法:
PATH="$PATH":/home/fz/coding
# 注意這種方式新增的路徑在計算機重啟後就會失效
# 要想永久的新增上路徑需修改對應的配置檔案
PS1
# 命令提示符設定
-\d:顯示日期,格式為“星期月日”
-\h:顯示完整的主機名。如預設主機名"localhost.localdomain"
-t:顯示24小時制時間,格式為"HH:MM:SS"
-\A:顯示24小時制時間,格式為“HH:MM"
-\u:顯示當前使用者名稱
-\w:顯示當前所在目錄的完整名稱
-\W:顯示當前所在目錄的最後一個目錄
-\$:提示符。如果是root使用者會顯示提示符為“#”,如果是普通使用者會顯示提示符為“$"
三、位置變數
位置變數
位置引數變數 | 作用 |
$n | n為數字,0表示命令本身,$1~$9代表改命令的第一到第九引數,十以上的引數用大括號包含,如${10} |
$* | 代表命令列中的所有的引數,$*把所有的引數看成一個整體 |
[email protected] | 代表命令列中的所有的引數,[email protected]把每個引數區別對待 |
$# | 這個變數代表命令列中所有引數的個數 |
$n其實就類似於c語言中的形參的概念,用來接收外部傳來的實參的值。
#!/bin/bash
#演示位置變數$n
#n為數字,0表示命令本身,$1~$9代表改命令的第一到第九引數,十以上的引數用大括號包含,如${10}
num1=$1
num2=$2
sum=$(($num1+$num2))
#變數sum的和是num1加num2
echo $sum
#列印變數sum的值
執行時對應的傳入兩個引數,就能計算兩個數的和,如下所示:
四、預定義變數
預定義變數 | 作用 |
$? | 最後一次執行的命令的返回狀態。如果這個變數的值為0,證明上一個命令正確執行;如果這個變數的值為非0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確 |
$$ | 當前程序的程序號(PID) |
$! | 後臺執行的最後一個程序的程序號(PID) |
#!/bin/bash
echo "dang qian : $$"
find /home -name hello.sh & # &符號是把命令放在後臺執行的意思
echo "hou tai: $!"
接收鍵盤輸入的命令:read [選項] [變數名]
-選型:
-p "提示資訊":在等待read輸入時,輸出提示資訊
-t 秒數:read命令會一直等待使用者輸入,使用此選項可以指定等待時間
-n 字元數:read命令只接受指定的字元數,就會執行
-s :隱藏輸入的資料,適用於機密資訊的輸入
以下是一個名為read.sh的指令碼,執行結果如下:
#!/bin/bash
#The filename is read.sh
read -p "please input your name: " -t 30 name
echo $name
read -p "please input your passwd: " -s passwd
echo
echo $passwd
read -p "please input your sex [M/F]: " -n 1 sex
echo
echo $sex