作者 主題: 8/2 shell script  (閱讀 11712 次)

0 會員 與 1 訪客 正在閱讀本文。

freebase

  • 實習板主
  • 憂鬱的高中生
  • ***
  • 文章數: 166
    • 檢視個人資料
    • http://www.freebase.idv.tw
8/2 shell script
« 於: 2004-08-02 23:40 »
(以下題目請通過才往下看..^^  3Q)
     1. 一般情況下,我們使用文字編輯器建立一個檔案的時候。
        建立檔案者擁有該檔案的讀寫權,而其他使用者擁有該檔
        的讀取權。

        若要使編輯好的 shell script可以執行,請修改該權限。
        使檔案可以執行。
       
   Q  >此時該下什麼指令?

     2.比如說我們現在有一個scripting的絕對路徑如下
       /home/test/123.sh
       有兩種指令的下法,兩種各有所不同。
       (1) $ source 123.sh
       (2) $ cd /home/test
           $ chmod +x
       (3) $ 123.sh
       有誰要來說說兩者不同的地方嗎?^^
       沒有的話明天小弟在來講講看..^^
       當然摟..^%^不一定是正確的就是
   
  2.test
    首先我們要先知道 TURE 的值是零  而其他 false都是非零  (不是只有1而已)
    [ EXPRESSION ]     <  == test的寫法1
    $test 123 -a 345   <  == test的寫法2
 
    EXP1 -a EXP2        exp1 和 2都成立才等於 ture
    EXP1 -o EXP2        兩者其中有一者成立就  ture

    $test 123 = 456  
    $echo $?
    得到的結果為0 =ture 其他則是false

    $ [ !123 -eq 456 -a 123 = 456] &&  echo xxx
    $ echo $?

HaWay

  • 大隻佬!
  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 3980
    • 檢視個人資料
Re: 8/2 shell script
« 回覆 #1 於: 2004-08-08 23:46 »
引述: "freebase"
(以下題目請通過才往下看..^^  3Q)
     1. 一般情況下,我們使用文字編輯器建立一個檔案的時候。
        建立檔案者擁有該檔案的讀寫權,而其他使用者擁有該檔
        的讀取權。

        若要使編輯好的 shell script可以執行,請修改該權限。
        使檔案可以執行。
       
   Q  >此時該下什麼指令?

答案是不是在第二題出現啦~? ^^"
引述: "freebase"


     2.比如說我們現在有一個scripting的絕對路徑如下
       /home/test/123.sh
       有兩種指令的下法,兩種各有所不同。
       (1) $ source 123.sh
       (2) $ cd /home/test
           $ chmod +x
       (3) $ 123.sh
       有誰要來說說兩者不同的地方嗎?^^
       沒有的話明天小弟在來講講看..^^
       當然摟..^%^不一定是正確的就是
 

抱歉!我不是鑽牛角尖,不過 (3) 的方法是不是少了什麼?
(3) $ . 123.sh,因為 PATH 裡面都通常不會有 PATH:. ^^"
引述: "freebase"

  2.test
    首先我們要先知道 TURE 的值是零  而其他 false都是非零  (不是只有1而已)
    [ EXPRESSION ]     <  == test的寫法1
    $test 123 -a 345   <  == test的寫法2
 
    EXP1 -a EXP2        exp1 和 2都成立才等於 ture
    EXP1 -o EXP2        兩者其中有一者成立就  ture

    $test 123 = 456  
    $echo $?
    得到的結果為0 =ture 其他則是false

嘿嘿!我的 $? 回傳是 1 ?? :lol:

引述: "freebase"

    $ [ !123 -eq 456 -a 123 = 456] &&  echo xxx
    $ echo $?

這邊我在測試的時候會發生一個問題,當然我是在
command line 的模式下 key in 會發生就是
shell 會將 [ !123 解釋為 !123
於是就變成 history 的命令啦~ XD
不過我還沒測試 shell script 是不是也會這樣
是不是要用 [ ! 123 -eq ......... ] && echo xxx 阿??
還有 456] 後面一定要空格喔 "456 ]" ^^
我做人那麼 nice, 肯定有什麼誤會.....

freebase

  • 實習板主
  • 憂鬱的高中生
  • ***
  • 文章數: 166
    • 檢視個人資料
    • http://www.freebase.idv.tw
8/2 shell script
« 回覆 #2 於: 2004-08-10 12:26 »
$ [ ! 123 -eq 456 -a 123 = 456 ] && echo xxx


是這樣麼~...>"<

小圭

  • 憂鬱的高中生
  • ***
  • 文章數: 92
    • 檢視個人資料
    • 超好用網路行銷工具
8/2 shell script
« 回覆 #3 於: 2004-08-11 05:38 »
$ [_ !_ 123 -eq 456 -a 123 = 456_ ] && echo xxx

呵..紅色這三個地方需要有IFS才行 ^^
更多超好用網路行銷工具在這
請各位幫我在活動相片按讚哦:http://on.fb.me/1DREeVa

freebase

  • 實習板主
  • 憂鬱的高中生
  • ***
  • 文章數: 166
    • 檢視個人資料
    • http://www.freebase.idv.tw
8/2 shell script
« 回覆 #4 於: 2004-08-11 19:43 »
shell 之 function觀念..^^



function afunc
{
 echo in function $0 $1 $2 // $0 $1 $2 都是function內定意的
 var1="in function" // 宣告 var1  = in function
 echo var1: $var1  // echo
}
///以上為一個function
var1="out function" //這是在 function外定意的 var1
echo var1 = $var1  //這時echo出來的[var1] 值是在function外定意的var1
afunc funcarg1 funcarg2 //跑function的內容 此時的$1 = funcarg1 $2 =funcarg2
echo var1 = $var1  //此時呼叫的var1值則是由afunc內定意的$var
echo $0: $1 $2   // 此時取的值以是命令槁中的值... 不是function

///大部份來說都沒有什麼問題  可能會有人有疑問為什麼最後一行echo出的值不是function中的吧


假設這個命令稿為如下...
 -----------------------------------------------------
   1   2   3   4   5
 (一到五行都為function 中定意的內容 )
   6
 (在命令稿中定意var1 = out function)
   7
 (echo出 var1的值.... 當然也就是out function)
   8
 (調用函式庫   此時 $0的值為 afunc 也就是函式的名子 $1 和 $2 就是 funcarg1 與funcarg2  以這樣的值去跑在function內的那三行... 此時的var1 值以是function中的那一個 "in function")
   9
 (在命令稿中echo var1 (此時以經是執行命令稿的內容..與afunc無關 只是 afunc以將var1從新定意成"in function"))
  10
 (這行當然也就與 函式沒有關連.所以它調用的值還是當出我們在 command上面 下的
 並不是function中的內容..)
 
  命令稿中的var1值可以替換
  而$0 則是原本的那一個...
  並不會因為function而影響

(本文程式範例取自 oreilly 的 learning the bash shell
 解釋的地方如有錯誤還請多多指教)

freebase

  • 實習板主
  • 憂鬱的高中生
  • ***
  • 文章數: 166
    • 檢視個人資料
    • http://www.freebase.idv.tw
8/2 shell script
« 回覆 #5 於: 2004-08-13 01:23 »
bash shell  流程控制 -- (1)  if else

  1..此語法之結構

  if  條件
   then
     述句
   elif 條件
     then
    述句
  else
    述句
 
   if 會檢查條件  如果得到的結果(p.s結束狀態)是ture  就會跳到then去執行
   elif 就像中文的 "否則就" 也就是說當if的條件不等於ture時 才會去執行elif
   else就是上面所有條件都不成立之時才去跑的 長長是錯誤狀態之下才會跑的部份
     

   p.s bash  和一般的c語言有所不同的地方就在於他的條件是實值的一個述句
       並非我們一般所了解的布林 每一個述句都有一個所為的結束狀態
       這個結束狀態是在unix中所有語言執行結束時都會傳一個編號給叫用他的行程
       


   

 2.條件測試
   2.1 字串比較
        算符      若...則為ture
     var1 =  var2          var1 符合 var2
     var1 != var2          var1 不符合 var2
     var1 <  var2          var1 小於 var2
     var1 >  var2          var1 大於 var2
     -n var1               var1不是空值
     -z var1               var1是空值
   2.2
     還有非常非常多比對的方法..^^ 請服用google大神查找lo..^^
   
 3. 條件的使用方法  
   3.1 最簡單的
        code
          |
          |
        ---------------------------------------
        if [ "$1" = "$2" ]
   then
     echo $1 = $2
   else
     echo "$1 <> $2 "
   fi
        ---------------------------------------

   3.2  && 與 ||的使用..^^

     if com1 && com2  
     // 如果com1的結束狀態是0 會再執行 com2 若 com的結束狀態也為0
        才執行then之後      如果com1得到的是非0 com則也不會執行
        也就是說要兩個得到的值都為ture 才會執行then
     if com1 || com2   // 只要其中有一個結束狀態為0 就會執行then