變量的默認類型都是字符串型
。//即系統把全部值都看成字符串放到變量中,不論這個「字符串」其實是整數、浮點數等等。一、變量=值 e.g x=5 注意,變量名只能是字母、下劃線、數字組成且不能以數字開頭,=號左右不可有空格
二、""
會解析特殊符號,例如$
,''
不會解析特殊符號
三、引用變量:$變量名
例如:$x
四、全部變量默認的值都是字符串類型,不可作Math
運算。
五、變量疊加 e.g y="$x"123
或者 y=${x}123
六、查看變量 set
會列出系統中全部的變量,包括環境變量和自定義變量set -u
//設定當調用不存在變量時,會提示錯誤
七、刪除變量 unset
變量名 例如:unset x 注意沒有$。linux
環境變量是全局變量,用戶自定義變量是局部變量。shell
用戶自定義變量只在當前的 shell
中生效,環境變量在當前 shell
和這個 shell
的全部子 shell
中生效。centos
export 變量名=變量值
或數組
變量名=變量值 export 變量名
set 查看全部變量 env 查看環境變量
unset 環境名
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 用戶爲"#",普通用戶爲"$"
當前語系查詢:locale
//直接生效的是LANG
變量(默認語系) LC_ALL
:定義總體語系(不經常使用)函數
echo $LANG //當前語系環境 echo $LC_ALL //總體語系環境
locale -a | more 查看Linux支持的全部語系環境 cat /etc/sysconfig/i18n //下次開機之後的系統環境 LANG=zh_CN.UTF-8 //切換成中文
$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
前面說到的邏輯或:||
-->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
Shell
變量弱類型,默認字符串變量。
declare [+/-][選項] 變量名
選項:
-
給變量設定類型屬性+
取消變量的類型屬性-a
將變量聲明爲數組型-i
將變量設定爲整型(integer)-x
聲明爲環境變量-r
設置爲只讀屬性-p
顯示指定變量的被聲明類型
定義數組:movie[0]=zp movie[1]=tp declare -a movie[2]=live
調用數組:echo ${movie}
表示調用第一個echo ${movie[1]}
表示調用第二個echo ${movie[*]}
表示顯示數組中的全部元素
declare -x test =123
做用與export
相同。export
命令實際過程是調用declare
命令
列出系統中全部變量的類型:declare -p
aa=11 bb=22 declare -i cc=$aa+$bb
a=11 b=22 dd=$(expr $aa + $bb)
注:+
旁邊必定要留空格。
gg=$(($aa+$bb)) //推薦該方法
或
gg=$[$aa+$bb]
注:$var=$(命令)
//先執行命令,而後再把結果給變量。gg=$(date)
//把系統函數輸出值複製給gg
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
用戶自定義變量(本地變量)
環境變量:定義每一個用戶的操做環境, 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