Linux Shell編程之變量、運算符、環境配置文件

1、變量

1.1 變量命名規則

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

1.2 變量類型

1.2.1 用戶自定義變量

一、變量=值 e.g x=5 注意,變量名只能是字母、下劃線、數字組成且不能以數字開頭,=號左右不可有空格
二、""會解析特殊符號,例如$''不會解析特殊符號
三、引用變量:$變量名 例如:$x
四、全部變量默認的值都是字符串類型,不可作Math運算。
五、變量疊加 e.g y="$x"123 或者 y=${x}123
六、查看變量 set 會列出系統中全部的變量,包括環境變量和自定義變量
set -u //設定當調用不存在變量時,會提示錯誤
七、刪除變量 unset 變量名 例如:unset x 注意沒有$。linux

1.2.2 環境變量

1.2.2.1 環境變量與用戶自定義變量的區別

環境變量是全局變量,用戶自定義變量是局部變量。shell

用戶自定義變量只在當前的 shell 中生效,環境變量在當前 shell 和這個 shell 的全部子 shell 中生效。centos

1.2.2.2 用戶自定義環境變量
export 變量名=變量值

數組

變量名=變量值
export 變量名
1.2.2.3 查看環境變量
set 查看全部變量
env 查看環境變量
1.2.2.4 刪除環境變量
unset 環境名
1.2.2.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 ,但系統重啓後失效。bash

PS1:命令提示符設置ssh

\d:顯示日期,格式爲"星期 月 日"
\H:顯示完整的主機名
\t:顯示 24 小時制時間,格式爲"HH:MM:SS"
\A:顯示 24 小時制時間,格式爲"HH:MM"
\u:顯示當前用戶名
\w:顯示當前所在目錄的完整名稱
\W:顯示當前所在目錄的最後一個目錄
\$:提示符。root 用戶爲"#",普通用戶爲"$"

1.2.3 語系變量

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

echo $LANG    //當前語系環境
echo $LC_ALL  //總體語系環境
locale -a | more 查看Linux支持的全部語系環境

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

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

1.2.4 位置參數變量

$n:n 爲數字,$0 表明命令自己,$1-$9 表明第一到第九個參數,十以上的參數須要用大括號包含,如 ${10}。
$*:這個變量表明命令行中全部的參數,$* 把全部的參數當作一個總體。
$@:這個變量也表明命令行中全部的參數,不過 $@ 把每一個參數區分對待。
$#:這個變量表明命令行中全部參數的個數。

例子1:測試

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

linux默認變量都是字符串,因此用兩個((來進行運算。
執行腳本:
$ ./test.sh 45 76spa

例子2:命令行

#!/bin/bash
echo "A total of $# parameters"
#使用 $# 表明全部參數的個數
echo "The parameters is:$*"
#使用 $* 表明全部的參數
echo "The parameters is:$@"
#使用 $@ 表明全部的參數

執行腳本:
$ ./test.sh 11 22 33 44

例子3:$* 與 $@ 的區別

#!/bin/bash
for i in "$*"
# $* 中全部參數當作是一個總體,因此這個 for 循環只會循環一次
do
  echo "The parameters is:$i"
done

for y in "$@"
# $@ 中每一個參數都當作是獨立的,因此 $@ 中有幾個參數,就會循環幾回
do
  echo "Parameter:$y"
done

1.2.5 預約義變量

clipboard.png

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

能夠經過一個簡單的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

2、運算符

Shell變量弱類型,默認字符串變量。

2.1 declare聲明變量類型

declare [+/-][選項] 變量名

選項:

- 給變量設定類型屬性
+ 取消變量的類型屬性
-a 將變量聲明爲數組型
-i 將變量設定爲整型(integer)
-x 聲明爲環境變量
-r 設置爲只讀屬性
-p 顯示指定變量的被聲明類型

2.1.1 聲明數組變量

定義數組:movie[0]=zp movie[1]=tp declare -a movie[2]=live
調用數組:
echo ${movie} 表示調用第一個
echo ${movie[1]} 表示調用第二個
echo ${movie[*]} 表示顯示數組中的全部元素

2.1.2 聲明環境變量

declare -x test =123 做用與export相同。export命令實際過程是調用declare命令

列出系統中全部變量的類型:declare -p

2.2 數值運算的方法

2.2.1 方法一

aa=11 bb=22 
declare -i cc=$aa+$bb

2.2.2 方法二

a=11 b=22
dd=$(expr $aa + $bb)

注:
+旁邊必定要留空格。

2.2.3 方法三

gg=$(($aa+$bb))  //推薦該方法

gg=$[$aa+$bb]

注:
$var=$(命令) //先執行命令,而後再把結果給變量。
gg=$(date)//把系統函數輸出值複製給gg

clipboard.png

2.3 變量測試

unset y
x=${y-2}
echo $x --> x=2
y="" --> 將y的值設爲空值
x=${y-2}
echo $x --> x= 空
y=1
x=${y-2}
echo $x --> x=1

clipboard.png

3、環境變量配置文件

3.1 環境變量配置文件簡介

用戶自定義變量(本地變量)
環境變量:定義每一個用戶的操做環境, PATH PS1
eg:

echo $PS1
\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[35;40m\]\W\[\e[0m\]]\$

從新配置配置文件:
source+配置文件
或者. 配置文件

eg :

[root@centos ~]# . .bashrc
[root@centos ~]# source .bashrc

環境變量配置文件簡介:

PATH HISTSIZE PS1 HOSTNAME

環境變量配置文件主要是定義對系統操做環境系統生效的系統默認的環境變量

~ 表明家目錄,每一個用戶都會有,家目錄只是當前登陸用戶生效。
放在etc會對全部用戶起做用。

如下是關於登陸的5個環境變量配置文件。

/etc/profile
/etc/profile.d/*.sh
~/.bash_profile

~/.bashrc
/etc/bashrc

3.2 功能

clipboard.png

clipboard.png

clipboard.png

相關文章
相關標籤/搜索