歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> shell基礎

shell基礎

日期:2017/3/6 15:26:35   编辑:關於Unix
Shell變量名使用的特殊字符 # 傳送給命令Shell的參數序號 - 在Shell啟動或使用set命令時提供選項 ? 上一條命令執行後返回的值 當前shell的進程號 ! 上一個子進程的進程號 @ 所有的參數,每個都用雙括號括起 * 所有參數,用雙括號括起 n 位置參數值,n表示位

}}

Shell變量名使用的特殊字符
        $# 傳送給命令Shell的參數序號
        $- 在Shell啟動或使用set命令時提供選項
        $? 上一條命令執行後返回的值
        $$ 當前shell的進程號
        $! 上一個子進程的進程號
        $@ 所有的參數,每個都用雙括號括起
        $* 所有參數,用雙括號括起
        $n 位置參數值,n表示位置
         當前shell名


echo "$HOME $PATH"
 結果顯示$/u/ice_walk/bin:/etc:/usr/bin
 而
echo '$HOME $PATH' 結果顯示$HOME $PATH
shell的逃逸符是一個"\",表示其後的字符不具有特殊的含義或不是shell的函數
 echo $HOME $PATH
 結果顯$$HOME /bin:/etc:/usr/bin:

可以用變量和其他字符組成新的字,例如:
    SUN=sun
    echo $day
sunday


用戶也可以在命令行上同時對多個變量賦值,賦值語句之間用空格分開:
    X=x Y=y
    注意變量賦值是從右到左進行的

}}}

expr命令將把一個算術表達式作為參數,通常形式如下:
    expr [數字] [操作符] [數字]
  由於Shell是按字符形式存儲變量的,所以用戶必須保證參加算術運算的操作數必須為數值。下面是有效的算術操作符:
    +   兩個整數相加
    -   第一個數減去第二個數
    *   兩整數相乘
    /   第一個整數除以第二個整數
    %   兩整數相除,取余數

用戶不能單純使用"*"做乘法,若輸入:
    $expr 4*5
  系統將會報錯,因為Shell看到"*"將會首先進行文件名替換。正確形式為:
    $expr 4 \* 5
     結果顯示:20

{{{{shell樣例 注意:}}}}


#!/bin/bash
flag=1
top=10000
date >>/backup1/time.txt
while [ $flag -lt $top ] -lt是小於 注意 需要用[ ],且注意 [後 和]後,都有空格
do
cd /backup1/check
dd if=/dev/zero of=test_$flag.txt bs=1024 count=2000000
rm -f test_$flag.txt
flag=`expr $flag + 1` 注意 左邊 需要用flag而不是$flag表示 給變量值,特別注意是=號,前後 不能有空格,而且 expr $flag + 1 需要用執行符``包括
done


}}}}}

echo命令可以使用一些特殊的逃逸字符進行格式化輸出,下面是這些字符及其含義:
    \b  Backspace
    \c  顯示後不換行
    \f  在終端上屏幕的開始處顯示
    \n  換行
    \r  回車
    \t  制表符
    \v  垂直制表符
    \   反斜框
    nnn 用1,2或3位8進制整數表示一個ASCII碼字符

echo -en $"\t\tPress 'I' to enter interactive startup."
-e表示 允許\有新的意義
-n表示 不換行 如果 和 “”內的參數 有沖突,以“”內為准


}}
測試字符串間的關系


有關串的操作符如下:
    str1 = str2      當兩個串有相同內容、長度時為真
    str1 != str2      當串str1和str2不等時為真
    -n str1        當串的長度大於0時為真(串非空)
    -z str1        當串的長度為0時為真(空串)
    str1         當串str1為非空時為真


if [ -z "$IN_INITLOG" ]; 字符使用時 用""


有關文件的測試
  使用test進行的第三類測試是測試文件的狀態,用戶可以測試文件是否存在,是否可寫以及其他文件屬性。下面是文件測試時使用的選項。注意只有文件存在時,才有可能為真。
  -r file     用戶可讀為真
  -w file     用戶可寫為真
  -x file     用戶可執行為真
  -f file     文件為正規文件為真
  -d file     文件為目錄為真
  -c file     文件為字符特殊文件為真
  -b file     文件為塊特殊文件為真
  -s file     文件大小非0時為真
  -t file     當文件描述符(默認為1)指定的設備為終端時為真
復雜的條件測試(and 、or 、not)
  -a         與
  -o        或
  !        非
  就是組合條件了,任何高級語言中都有的(NOT 、AND 、OR),例如:
    $test -r em.null -a -s em.null
    $echo $?
    結果顯示:1
    說明了em.null並不是可讀並且非空的文件
測試兩個整數之間關系
  test命令與expr命令一樣,也可以把字符轉變成整數,然後對其操作。test命令對兩個數進行比較,使用的操作符如下:
    int1 -eq int2    兩數相等為真 equal (eq)
    int1 -ne int2    兩數不等為真 not equal (ne)
    int1 -gt int2    int1大於int2為真 great (gt)
    int1 -ge int2    int1大於等於int2為真 great equal (ge)
    int1 -lt int2    int1小於int2為真 less than (lt)
    int1 -le int2    int1小於等於int2為真 less than equal (le)

本階段 小程序:


使用while循環使程序執行一次可以備份多個用戶指定的目錄。代碼如下:
echo "歡迎使用備份小程序"
  ANS=Y
  while [ $ANS = Y -o $ANS = y ]
  do
    echo _
    #讀目錄名
    echo "輸入要備份的目錄名:\c"
    read DIR
    if [ ! -d $DIR ]
    then
        echo "$DIR不是一個目錄!"
        exit 1
    fi
    cd $DIR
    echo "請選擇:"
    echo _
    echo "1 恢復數據到 $DIR"
    echo "2 備份$DIR的數據"
    echo
    echo "請選擇:\c"
    read CHOICE
    case "$CHOICE" in
       1) echo "恢復中… …"
        cpio -i        2) echo "備份中… …"
        cpio -o >/dev/rmt0;;
       *) echo "選擇無效"
    esac
    if [ $? -ne 0 ]
    then
       echo "cpio執行過程中出現問題"
       exit 2
    fi
    echo "繼續別的目錄嗎?(Y/y)\c"
    read ANS
  done


2。
if [ $# -eq 0 ]
then
echo "Usage:x_shift2.sh 參數"
exit 1
fi


3。
I=1
while [ $I -lt 10 ]
do
{
echo "$I\c"
I=`expr $I + 1`
if [ $I -eq 3 ]
then
continue
fi
if [ $I -eq 7 ]
then
break
fi
}
done

Copyright © Linux教程網 All Rights Reserved