Linux shell基礎(一)

markzy5201190發表於2013-06-11
Linux shell基礎(一)

1.遠端登入主機
ssh 賬號@IP/主機名
ssh mark@192.168.0.99

2.Socket檔案是內部程式通訊的一種特殊檔案,可作為和遠端主機通訊的管道
如: mysql -S /tmp/mysql.socket

3.續行符號
先鍵入\ =>Enter
./configure \
    --with-apache=../apache_$ApacheVersion \
    --with-mysql=$MYSQLHOME &&

4.字符集合[]
所列字元範圍中的某一個字元
[a-zA-Z0-9] - 代表字元範圍

5.括號擴充套件{}
{a,b,c}\*{d,e,f}
a*d a*e ...

6.轉向輸入和轉向輸出
命令或Script. < 輸入檔案 > 輸出檔案
sort < unsort_input.txt > sorted_output.txt

7.登陸(login)
登陸主機,login shell 先執行/etc/profile,接著bash檢查使用者的
主目錄中是否有.bash_profile 或 .bash_login 或 .profile,若有
則會讀取並執行其中一個檔案,執行順序:
.bash_profile
.bash_login
.profile
滿足其中一個即可

8.列出登陸主機後,最近執行過的命令
fc -l
fc -l Number //列出大於或等於 指定編號歷史命令

9.read 一次讀取一行資料放入陣列中
read -a arr < echo ${arr[2]}
dfe

9.讀取引數,結合成一個新指令,在進行變數代換後,執行
log="ls -al /data/*.sh"
eval $log

10.locate 關鍵詞
由檔名資料庫中,找出包含有"關鍵詞"的檔案路徑
locate lsof

11.tr 轉換或刪除字元
tr k K < dataf1
執行結果:dataf1的k換成K字元
tr -d k
執行結果:k字元全刪除

12.xargs
由標準輸入,安排要執行的命令和引數
find . -name '*.txt' | xargs -n 2 diff

13.在寫Script時,為了怕變數寫錯,造成排錯困難,可以規定:
變數要進過設定的程式才能使用,如下:
#!/bin/bash

shopt -s -o nounset  <echo $Infomix

改成如下:
#!/bin/bash

shopt -s -o nounset
declare Infomix=50  //declare 定義變數,不會提示 nounset 變數
echo $Infomix

14.在shell Script中,$放在變數名之前,如果需要顯示$,
用 \--表示轉義
用 ''--也可以得到
I=8
echo \$I 或 echo '$I' //'' 單引號作用:一個所見即所得的字串(即寫什麼,就是顯示什麼)

15.IFS
定義分隔符,default value:空格符,tab字元,換行字元(newline)
#!/bin/bash

PL="root:x:0:0:root:/root:/bin/bash"

IFS=':' //分隔符

j=0  //定義行數

for i in $PL
do
    j=$((j+1))
    echo 第$j個欄位是$i
done

16.陣列
B=(123 [8]=188 266)
echo ${B[@]}      //取出陣列元素
echo ${#B[@]}     //資料個數
unset B           //取消陣列
unset B[0]        //取消陣列某個元素

17.利用here document,打包C的原始碼
#!/bin/bash

echo "正在產生hello.c...."
echo
cat    < hello.c
#include

int main(){
    printf("Hello world!\n");
    return 0;
}

EOF

echo "編譯hello.c...."
echo
#編譯Hello.c,產生執行檔案
gcc -o hello hello.c

#若編譯成功,就執行。
if [ $? -eq 0];then
    echo "執行hello...."
    echo
    ./hello
else
    echo 'Complile ERROR:hello.c'
fi

18.高階變數主題
變數擴充套件
命令替換
算術擴充套件
在Bash Shell中,$算符會觸發上述3種擴充套件,形式如下:
${變數名稱}---變數擴充套件---${filename}
$(命令)---命令替換---$(ls /)
$((算術表示式))---算術擴充套件---$((9+9))

19.測試變數 存在與否用法
${待測變數-預設值}
待測變數,若不存在,返回 預設值;存在,返回 待測變數
unset myname
r=${$myname - 'fuck'}
echo $r

20.${待測變數:-預設值} 與上面相比 多了:測試變數 不存在 或 其值為空,返回 預設值
IamHappy='Feel so good'
r=${IamHappy:+'true'}
echo $r

21. 多檔案搜尋方式:
fgrep.sh
#!/bin/bash

exec grep -F ${1+"$@"}

fgrep.sh  Mem /proc/meminfo     /root/test.txt

$1=Mem 非空,則,${1+"$@"}傳回$@,此變數值等於所有位置引數組合起來的:
Mem /proce/meminfo /root/test.txt

grep -F Mem /proce/meminfo /root/test.txt

整理:
${待測變數:-預設值}---回傳結果-定是非空值---測不存在或空值
${待測變數:=預設值}---給空值變數設一個預設值---測不存在或空值
${待測變數:?預設值}---檢查條件是否完備---測不存在或空值
${待測變數:+預設值}---判斷某事是否為真---測試存在且非空
移除:,只測存在性,不測空值
記憶法:
:)---空---測試空
-)---負向---測不存在
=)---設值---給空值變數設一個預設值
?)---有問題---檢查條件是否完備後再來執行吧
+)---正向---測試存在

22.字串擷取
語法一:${變數:位置起點}
myname="sheller man"
substr=${myname:4}
echo $substr
語法二:${變數:位置起點:長度}
filename="/etc/apache2"
dir1=${filename:1:3}
echo $dir1



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26855487/viewspace-763735/,如需轉載,請註明出處,否則將追究法律責任。

相關文章