變數:
本地變數:只對當前有效
環境變數:對當前shell和子shell都有效
export A=3 即將A定義為變數,並將3賦值於A
A=3
export A 引用不需要加&
export 也查看環境變數
[root@server56 ~]# export
declare -x CVS_RSH="ssh"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="server56.example.com"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.gbk"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PWD="/root"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_CLIENT="192.168.0.211 49242 22"
declare -x SSH_CONNECTION="192.168.0.211 49242 192.168.0.156 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm"
declare -x USER="root"
DISPLAY:可以定義你在那個案頭
HISTSIZE:表示定義曆史命令的數量
HOME:當前的家目錄
PS1 基名
env:顯示當前變數
主要用於特點環境
特殊變數:bash
$? :上個命令是否執行成功,0表示成功,1-255表示不同的錯誤
位置變數:$1:直接向指令碼傳遞一個變數
$2, $3,超過10建議加{}
算數運算echo "$[$a+$b]"
"$(($a+$b))"
BASH命令別名:
alias 只對當前有效
當後面的命令有空格時要有引號引起來
alias cdnet='cd /etc/sysconfig/network-scripts'
撤銷 unalias
全域:/etc/profile,/etc/profile.d/*,/etc/bashrc
局部:~/.bash_profile,~/.bashrc,~/.bash_logout
profile類:
通常用於設定環境變數,運行使用者登入時要執行的一些命令
bashrc類:
設定別名,設定本地變數,只對當前shell有效
shell:
互動式登入式shell:需要使用者登入<input type="text"
第一步:讀取/etc/profile-->/etc/profile.d/>*-->~/.bash-->~/.bashrc -->/etc/bashrc
非互動式登入式shell:不需要使用者登入就能啟動並執行指令碼shell
先登入~/.bashrc-->/etc/bashrc-->/etc/profile.d/*
定義別名 聲明變數
source /etc/profile重讀這個檔案
. /etc/profile 重讀這個檔案 重讀不建議
\避免本意
輸入輸出重新導向
預設為標準輸入輸出
標準輸出裝置:/dev/stdout,1MONITOR, >
錯誤輸出:/dev/stderr,2,MONITOR, 2>
標準輸入裝置:/dev/stdin,0表示標準輸入,KEYBOARD ,<
合并輸出資料流 &>
>覆蓋輸出重新導向 >>追加輸出重新導向 2>>錯誤資訊追加重新導向 &>>不能追加
set -C強制使用追加禁止使用覆蓋
>|強制覆蓋
ls /var >> /tmp/var.out 2>> /tmp/var.err
輸出資料流
2>&1 = &>
管道:|用於串連命令 把前一個命令的輸出結果當做後一個命令的輸入結果
COMMAND | COMMAND | COMMAND | COMMAND
tee將輸入資料流分開
ls /etc | tee /tmp/ls.out | less
多個命令的輸出都需要儲存到同一個檔案
自訂 輸出重新導向
0,1,2
exec 3> /tmp/myout.out 定義一個固定的檔案
ls >&3覆蓋到固定的檔案
exec 3>&- 撤銷
輸入用法同上
&> /dev/null 將不要的檔案定到資料黑洞
> /dev/null
程式執行流:
順序執行
選擇分支
迴圈執行:1+...+100
for I in 1 2 3 4 5; do
statement1
statement2
done
1 2 3 4 5 = `seq 1 10`
= $seq 1 10 $
= {1..10}
文本處理命令:
cut -d 指定分隔字元 為:
cut -d: -f1去第一段分割
IFS:內建內建分行符號
IFS=$‘\n'
grep:
grep,egrep,fgrep
grep [options]“PATTERN[模式]” file
Regex:基本Regex,擴充Regex
元字元 re
grep -i不區分大小寫
-v跟預設的動作相反,匹配到得不顯示
-n匹配到的再文中顯示行號
-A[after]n顯示匹配的後面n行
-B[before]n
-C[]n上下文,顯示上線n行
--color 把匹配到的高亮顯示
-E=egrep
^:定位行首行首匹配鉚定
$:行尾定位器
.匹配單個字元
*:匹配前面的字元出現0次或任意次
[]:匹配裡面的任意一個
[x-y]匹配範圍內的一個
\<
\>
\(..\)
$?:上一個命令執行狀態結果
0:執行成功
1-255:失敗
短路操作符:
&&:
command && command:前面成功才執行後面
||:前面不成功才執行後面