1. 程式人生 > >linux中的shell程式設計之變數

linux中的shell程式設計之變數

shell程式設計主要是為了簡化linux系統管理的。

shell中的變數是一種弱型別的變數,c,java等語言是一種強型別的語言。

linux中的所有的變數預設型別都是字元型別的

零、bash變數的分類

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