Bash初探之基礎知識

1:每個腳本開頭均需配置,指向bash的鏈接
   #!/bin/bash

 

2:FUNCNAME[0]表示當前運行的方法名稱。

3:awk
   在文件或字符串中基於指定規則來分解抽取信息,也可以基於指定的規則來輸出數據。
   例如:
   awk -F: '{print $2}'
   表示:以':'分割,獲取打印出的第2個信息。

   如果後面不帶-F,則默認是以空格分隔。

4:exit $?
  
5:字符串比較
   -e file 文件 file 已經存在
   -f file 文件 file 是普通文件
   -s file 文件 file 大小不爲零
   -d file 文件 file 是一個目錄
   -r file 文件 file 對當前用戶可以讀取
   -w file 文件 file 對當前用戶可以寫入
   -x file 文件 file 對當前用戶可以執行
   -g file 文件 file 的 GID 標誌被設置
   -u file 文件 file 的 UID 標誌被設置
   -O file 文件 file 是屬於當前用戶的
   -G file 文件 file 的組 ID 和當前用戶相同

6:兩個命令直接使用“ && ”表示並且,即執行前面的命令,同時執行後面的命令

7:定義function時。
   1) 局部變量定義:local
   2) 暫停當前進程多少豪秒:sleep 數字

 

8:shell調用java程序(見如下)

     export CLASSPATH="${javahome}/lib/tools.jar:${javahome}/jre/lib:/usr/local/bin/bin/memcached.jar:"
    local test=$(java com.jzh.operate.OperateMemcached "${memcached_ip}":"${memcached_port}" memcachedtest memcachedtest | awk '{print $1}')    

 

9:Memcached啓動時指定IP配置

INADDR_ANY就是指定地址爲0.0.0.0的地址,這個地址事實上表示不確定地址,或“所有地址”、“任意地址”。 一般來說,在各個系統中均定義成爲0值。

 

10:Linux系統環境變量在/etc/.profile文件中

 

11:BASH shell腳步在讀取(properties)配置文件時,最好先進行dos2unix命令,將配置文件中的換行去除。

 

12:su 命令詳解

      使用權限:所有使用者 
使用方式:su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
說明:變更爲其他使用者的身份,除 root 外,需要鍵入該使用者的密碼
參數:
-f 或 --fast 不必讀啓動檔(如 csh.cshrc 等),僅用於 csh 或 tcsh
-m -p 或 --preserve-environment 執行 su 時不改變環境變數
-c command 或 --command=command 變更爲帳號爲 USER 的使用者並執行指令(command)後再變回原來使用者
-s shell 或 --shell=shell 指定要執行的 shell (bash csh tcsh 等),預設值爲 /etc/passwd 內的該使用者(USER) shell
--help 顯示說明文件
--version 顯示版本資訊
- -l 或 --login 這個參數加了之後,就好像是重新 login 爲該使用者一樣,大部份環境變數(HOME SHELL USER等等)都是以該使用者(USER)爲主,並且工作目錄也會改變,如果沒有指定 USER ,內定是 root

 

13:tee命令

      tee能將輸入數據流同時雙向輸出到屏幕和文件
USER 欲變更的使用者帳號
ARG 傳入新的 shell 參數

14:typeset

typeset用於設置變量屬性,如大小寫,寬度,左右對齊等都可以用typeset來控制, 當用typeset改變一個變量的屬性時,這種改變是永久的

 

15:touch

更新文件的訪問和修改時間。

 

16:1>/dev/null 2>&1

shell中可能經常能看到:>/dev/null 2>&1

命令的結果可以通過%>的形式來定義輸出

/dev/null 代表空設備文件
> 代表重定向到哪裏,例如:echo "123" > /home/123.txt
1 表示stdout標準輸出,系統默認值是1,所以">/dev/null"等同於"1>/dev/null"
2 表示stderr標準錯誤
& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1

那麼本文標題的語句:
1>/dev/null 首先表示標準輸出重定向到空設備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息。
2>&1 接着,標準錯誤輸出重定向等同於 標準輸出,因爲之前標準輸出已經重定向到了空設備文件,所以標準錯誤輸出也重定向到空設備文件

 

17:if的邏輯表達式

 邏輯非 !                   條件表達式的相反
if [ ! 表達式 ]
if [ ! -d $num ]                        如果不存在目錄$num


    邏輯與 –a                    條件表達式的並列
if [ 表達式1  –a  表達式2 ]


    邏輯或 -o                    條件表達式的或
if [ 表達式1  –o 表達式2 ]

18:如何執行多重用戶下命令,且得到返回值

如:su - oracle -c "echo \"startup;\" | sqlplus \"/as sysdba\"" | tee /tmp/start_instance.log

即:當前用戶爲root,切換至oracle用戶下,同時執行sqlplus / as sysdba 中的startup命令。

 

19:shell腳本中包含另一個腳本文件的使用,見如下:

. 腳本文件名

 

20:" ' `含義

"":表示字符串。裏面如果存在命令也不會執行

''  :同上

``:表示字符串。裏面如果存在命令也會執行,且會返回執行結果。

 

21:在文件夾中搜索文件中包含的字符串

grep "字符串" * -R

 

22: usage使用

function usage
{
    echo "Usage:"
    echo "db_instance.sh [create|delete|start|stop]"
    echo "  create        create the instance"
    echo "  delete        delete the instance"
    echo "  start         start the instance"
    echo "  stop          stop the instance"
}

case $1 in
    create)
        create_instance
        exit $?
        ;;
    delete)
        delete_instance
        exit $?
        ;;
    start)
        start_instance
        exitcode=$?
        log INFO db_instance.sh "Start the instance,exit code:${exitcode}"
        exit ${exitcode}
        ;;
    stop)
        stop_instance
        exitcode=$?
        log INFO db_instance.sh "Stop the instance,exit code:${exitcode}"
        exit ${exitcode}
        ;;
    help)
        usage
        exit 0
        ;;
esac

usage

 

23:命令操作文件(sed、ed)

sed 是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操作;編寫轉換程序等。以下介紹的是Gnu版本的Sed 3.02

 

24:指定文件行數插入內容樣例

line_no=`grep -n "^[ ]*include[ ]*\"types.cf\"" /etc/main.cf | awk -F: '{print $1}'`
  ((line_no+=1))
  expr_str="include \"OracleTypes.cf\""
  cat << HERE | ed /etc/main.cf 1>/dev/null 2>&1
$line_no
i
$expr_str
.
w
q
HERE

 

25:dos2unix

dos2unix filename : 把dos文件轉換成unix文件,可以避免在unix下執行文件時空行報錯。

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