Bash
Bash 與 sh兼容,現在使用的Linux就是使用Bash作為用戶的基本Shell。
Linux中Shell
使用echo $SHELL
查看當前shell。 使用 vim /etc/shells
查看Linux支持的shell 。
alias
命令查看當前shell別名
//
#alias
alias ll='ls -l --corlor=auto'
...
在當前shell中設置臨時
別名alias alias_name='origin_name'
//
#alias vi='vim'
#vi //實際執行vim
刪除別名 unalias alias_name
#unalias vi
-當前用戶永久配置別名 vi ~/.bashrc
#vi ~/.bashrc
// 添加別名,並保存退出
alias vi='vim'
// 重新加載.bashrc文件到當前shell
#source ~/.bashrc
別名生效順序注:別名的優先級高於系統中默認命令
history [選項] [歷史命令保存文件]
options~/.bash_history
注: history中歷史命令為上次登錄時使用的命令,可以使用-w同步寫入這次登錄後使用的命令
歷史命令默認會保存1000條,可以在環境變量配置文件/etc/profile
中修改HISTORYSIZE
值
使用Tab鍵補全命令或文件名,一次Tab鍵未補全時,再次Tab鍵顯示多個補全後命令或文件後從中選擇使用的命令或文件,但有時沒有該命令或文件時無法完成補全。
**注:**Tab鍵使用$PATH環境變量中給定的可執行文件的搜索路徑中搜索命令
"$"
符號,而不當做是變量引用
// 變量名=變量值
#x=5 // 注:其間不能有空格 例如x= 5、x =5、x = 5等
// 打印變量
#echo $x
#echo ${x}
#x=123
#x="$x"456
#x=${x}789
set可以查看系統下所有變量,包括環境變量和用戶變量
// 查看所有變量
#set
// 設置此選項,調用未聲明變量時報錯(默認情況下無任何提示)
#echo $a
#set -u
#echo $a
-bash: a: unbound variable
unset 變量名
// 刪除變量,變量名前不能加$
#unset a
環境變量和用戶自定義變量的區別?
用戶自定義變量只能在當前shell中生效
環境變量在當前shell和這個shell的所有子shell中生效
// 進入子shell
# bash
// 查看當前進程樹
# pstree
|-
...
|-bash--bash--pstree
...
// 退出子shell
# exit
# pstree
|-
...
|-bash--pstree
...
// 當前shell中定義a
# a=5
# echo $a
5
// 進入子shell
# bash
# pstree
|-
...
|-bash--bash--pstree
...
// 無法查看父shell中的自定義的變量a
# echo $a
# eixt
// 父 shell 中導出自定義變量 a,子shell可以看到父shell中的變量
# export $a
# bash
// 子shell中查看變量a
# echo $a
5
// 子shell無法刪除父shell定義的變量a
# unset a
# exit
// 父shell刪除自定義的變量a
# unset a
PS1變量:命令提示符設置
\d:顯示日期,格式為 “星期 月 日” \H:顯示完整的主機名。如默認的主機名”localhost.localhost” \t:顯示24小時制時間,格式為“HH:MM:SS \A:顯示24小時制時間,格式為“HH:MM” \u:顯示當前用戶名 \w:顯示當前所在目錄的完整名稱 \W:顯示當前所在目錄的最後一個目錄 $:提示符。如果root用戶會顯示提示符為“#”,如果普通用戶會顯示提示符“$”
# echo $PS1
[\u@\h \W]\$
PS2 定義換行提示符如下代碼中的“>”
# ls \
>~
locale命令查看當前語系
LANG:定義系統主語系的變量 LC_ALL:定義整體語系的變量
// 查看系統當前語系
# locale
...
# echo $LANG
// 查看Linux系統支持的所有語系
# locale -a |more
cat /etc/sysconfig/i18n,下次開機啟動後系統進入的是默認語言環境
# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
Linxu中文支持
前提條件,正確安裝中文字體和中文語系
// 固定參數個數的求和shell腳本
#/bin/bash
num=$1
num=$2
sum=$(( $num1 + $num2 ))
echo $sum
// $*和$@的區別,保存為param.sh
#!/bin/bash
for i in "$*"
do
echo $i
done
for i in "$@"
do
echo $i
done
# chmod u+x param.sh
# ./param.sh 1 2 3 4
1 2 3 4
1
2
3
4
shell變量的缺點?
shell變量是弱類型 默認變量都是字符串declare來指明聲明的變量類型
declare [+/-][option] 變量名
options:
// shell變量默認為字符串
# aa=11
# bb=22
# cc=$aa+$bb
# echo $cc
11+22
// 明確聲明變量類型
# declare -i cc=$aa+$bb // 自動轉換了$aa、$bb為整型變量參與運算
# echo $cc
33
// 查看指定變量的屬性
# declare -p cc
declare -i cc="33"
// 定義數組,shell腳本能夠自動檢測出這個movie變量是數組
# movie[0]=zp
# movie[1]=tp
# declare -a movie[2]=live
# echo ${movie}
# echo ${movie[2]}
# echo ${movie[*]}
// export 調用 declare -x 變量 來聲明環境變量
# bb=2
# export bb
// export真正調用是declare -x bb=2
# declare -x bb=2
// 查看所有的環境變量
#declare -p
...
declare -x bb=2
...
// 只讀屬性,變量不能重新賦值、刪除、取消只讀屬性,一般不使用只讀屬性
# declare -rx test=123
# test=456
-bash: test: readonly variable
# unset test
-bash: test: cannot unset: readonly variable
# declare +r test
-bash: declare: test: readonly variable
// 上節中數值計算的方式求cc的數值比較復雜,可以使用下面方式
# aa=1
# bb=2
# dd=$(expr $aa + $bb) // 注:$aa和$bb和+ 之間有空格
# echo $dd
// 上面的方式也很復雜
# aa=1
# bb=2
# dd=$(($aa+$bb))
# dd=$[$aa+$bb]
注:這裡數值越大,優先級越高
注:變量測試方式十分簡潔但邏輯復雜,也不好記,實際工作中可以查閱;可以使用其他方式實現相同測試結果即可。