Linux-shell

shell 基礎
shell是系統跟計算機硬件交互時使用的中間介質,它只是系統的一個工具。在shell和計算機硬件之間還有一層東西那就是系統內核了。

一、變量
變量,說簡單點就是使用一個較簡單的字符串來替代某些具有特殊意義的設定以及數據。就拿PATH來講,這個PATH就代替了所有常用命令的絕對路徑的設定。
可以使用echo命令顯示變量的值。
使用env命令即可全部列出系統預設的全部系統變量。
env命令顯示的變量只是環境變量,系統預設的變量其實還有很多,你可以使用set命令把系統預設的全部變量都顯示出來。
一些系統常用的變量:
PATH 決定了shell將到哪些目錄中尋找命令或程序
HOME 當前用戶主目錄
HISTSIZE 歷史記錄數
LOGNAME 當前用戶的登錄名
HOSTNAME 指主機的名稱
SHELL 前用戶Shell類型
LANG 語言相關的環境變量,多語言可以修改此環境變量
MAIL 當前用戶的郵件存放目錄
PWD 當前目錄
環境變量一般在etc/profile 文件中設置,
比如jdk
export JAVA_HOME=/usr/local/jdk1.7.0_25
export JRE_HOME=/usr/local/jdk1.7.0_25/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
然後運行”source /etc/profile”就可以生效了

二、shell中的特殊符號
(1)通配符
在bash下,可以使用*來匹配零個或多個字符,而用?匹配一個字符。# :這個符號在linux中表示註釋說明的意思,即”#”後面的內容linux忽略掉。
(2)輸入輸出從定向
輸入重定向用於改變命令的輸入,輸出重定向用於改變命令的輸出。輸出重定向更爲常用,它經常用於將命令的結果輸入到文件中,
而不是屏幕上。輸入重定向的命令是<,輸出重定向的命令是>,另外還有錯誤重定向2>,以及追加重定向>>。
(3)管道符
前面已經提過過管道符”|”,就是把前面的命令運行的結果丟給後面的命令。
(4)grep :過濾一個或多個字符
比如
#ps axu 顯示所有進程
#ps aux|grep java ,只顯示java進程
(5)cut :截取某一個字段
語法:cut -d “分隔字符” [-cf] n 這裏的n是數字
-d :後面跟分隔字符,分隔字符要用雙引號括起來
-c :後面接的是第幾個字符
-f :後面接的是第幾個區塊
eg: cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

cat /etc/passwd |cut -d ":" -f 1  //以":"分割,然後取第1個數據塊。
root
bin
daemon
adm
lp
sync
shutdown
halt
mail

(6)sort :用做排序
-t 分隔符 :作用跟cut的-d一個意思
-n :使用純數字排序
-r :反向排序
-u :去重複

# head -5n /etc/passwd  顯示前5條
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

#head -5n /etc/passwd |sort  顯示前5條,並且排序
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

(7)、uniq :去重複的行,
-c :統計重複的行數,並把行數寫在前面 常和sort組合使用
(8)、& :如果想把一條命令放到後臺執行的話,則需要加上這個符號。通常用於命令運行時間非常長的情況。

三、shell腳本中的邏輯判斷
if(); then
    commad
fi
或者
if(); then
    command
else
    command
if

四、shell腳本中的循環

for( i in 'seq 1 5'); do
command
done

a=10;
while [$a >= 1]; do
echo  "$a";
a = $[$a-1];
done

五、shell腳本中的函數
function sum() {
sum = $[$1 + $2];
echo sum;
}

sum $1 $2
調用:
#./fun.sh 1 4
5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章