作者 主題: shell習題.........不會寫Q_Q  (閱讀 12318 次)

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

Judal

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 於: 2004-04-09 13:55 »
我們老師叫我們寫一個可以讓使用者輸入密碼的shell,當輸入錯誤可以再輸入三次,三次之後就跳出來

代碼: [選擇]
#! bin/bash  <---這是什麼意思,老師只說程式第一行一定要寫這個,但我看不懂,是指在bin下面建立一個名為bash檔的shell嗎?
             echo "please input your passwd:"
          if [passwd=123];
   then
         echo this is a:
                .
                .
                .
                .
怎麼判斷使用者輸入三次,我就是卡在這不會寫Q_Q
[/code]

wilson

  • 俺是博士!
  • *****
  • 文章數: 1821
  • 帥氣柴老大
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #1 於: 2004-04-09 14:11 »
第一行是只定執行此script的Shell~~
如果你用#!/bin/csh就是用csh來run~反之你現在這個就是用bash

另外~~要讀使用者的輸入~可以參考三個部份~~
read,case,getopts~~~你用read試試就可以了

至於輸入三次~就用判斷式去跑吧

elleryq

  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
shell習題.........不會寫Q_Q
« 回覆 #2 於: 2004-04-09 14:14 »
第一行是告訴 sh 說,接下來的指令都是要用 /bin/bash 處理~
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #3 於: 2004-04-09 15:16 »
迴圈 3 次 , 問完 3 次就出迴圈啦

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17406
    • 檢視個人資料
    • http://www.study-area.org
shell習題.........不會寫Q_Q
« 回覆 #4 於: 2004-04-09 15:25 »
tips:
1) #!/bin/sh 請看:
http://www.study-area.org/linux/system/linux_shell.htm
2) 要用 read 讀進 passwd
3)[ expression ] 裡的 test ,要在 [ ] 之間留空白鍵﹗
4) for i in 1 2 3; do .....; done 就有三次 looping 。你可在 [ xxxx ] test 成功後,用 break 來打斷 looping 。

Judal

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #5 於: 2004-04-12 14:02 »
#! bin/bash
 if [passwd=123];
 then
  echo "welcome user"
else
  for(i=1;i++)
echo  "please input your passwd:"
/if

那是這樣寫嗎?

Pail

  • 俺是博士!
  • *****
  • 文章數: 1040
  • 性別: 男
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #6 於: 2004-04-12 14:19 »
邏輯就不通了吧!!!!
Pail Luo.
Email: pail.luo@gmail.com

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17406
    • 檢視個人資料
    • http://www.study-area.org
shell習題.........不會寫Q_Q
« 回覆 #7 於: 2004-04-12 14:39 »
一步一步慢慢來...

先來練一下 [ exp ] 的寫法:
a=b
[ "$a" = b ] && echo 'bingo!'

若做得出結果,我再教你下一步...

Judal

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #8 於: 2004-04-12 17:43 »
引用
一步一步慢慢來...

先來練一下 [ exp ] 的寫法:
a=b
[ "$a" = b ] && echo 'bingo!'

若做得出結果,我再教你下一步...


a=b
而a的變數等於b
輸入b,則印出'bingo!'  ??

應該........不對吧^^||||
這就是沒有電腦的痛苦 :(
 偏偏星期五又要交作業...........

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17406
    • 檢視個人資料
    • http://www.study-area.org
shell習題.........不會寫Q_Q
« 回覆 #9 於: 2004-04-12 20:06 »
我請你照打,是有目的的:你就是"打字不小心"而已...

dean

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 1279
  • 性別: 男
  • 有些人,有些事,值得.
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #10 於: 2004-04-12 22:58 »
引述: "Judal"

a=b
而a的變數等於b
輸入b,則印出'bingo!'  ??

應該........不對吧^^||||
這就是沒有電腦的痛苦 :(
 偏偏星期五又要交作業...........

沒有電腦??那你怎麼上來發問的呢?

Judal

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #11 於: 2004-04-13 08:20 »
引用
netman
我請你照打,是有目的的:你就是"打字不小心"而已...


看沒!

引用
dean 發表於: 星期一 四月 12, 2004 10:58 pm    文章主題:  

沒有電腦??那你怎麼上來發問的呢?


我是說我沒有自已的電腦可以跑linux,但我可以去地下室借電腦來用
作業只能在上linux課的當天上傳了

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17406
    • 檢視個人資料
    • http://www.study-area.org
shell習題.........不會寫Q_Q
« 回覆 #12 於: 2004-04-13 08:48 »
少囉嗦,將你的打字結果貼上來吧....

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #13 於: 2004-04-13 10:01 »
引述: "Judal"

引用
dean 發表於: 星期一 四月 12, 2004 10:58 pm    文章主題:  

沒有電腦??那你怎麼上來發問的呢?


我是說我沒有自已的電腦可以跑linux,但我可以去地下室借電腦來用
作業只能在上linux課的當天上傳了


紙上作業是不可能學會程式的,
趕快去燒一片Knoppix ( http://knoppix.tnc.edu.tw/ )
到哪兒都可以玩linux。

Judal

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #14 於: 2004-04-13 16:12 »
引用
thyme
紙上作業是不可能學會程式的,
趕快去燒一片Knoppix ( http://knoppix.tnc.edu.tw/ )
到哪兒都可以玩linux。


...........
我是說我在學校除了電腦課能用之外
在家不能用,在宿舍也不能用
你要我怎麼燒啊?

引用
netman  少囉嗦,將你的打字結果貼上來吧....


我.........
真的不知道你要我做什麼..........

shengeih

  • 鑽研的研究生
  • *****
  • 文章數: 970
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #15 於: 2004-04-13 16:14 »
要繳交作業之前,先把你的環境先搞定喔...!!!

有砍樹沒有鋸子或斧頭怎麼砍的了?

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #16 於: 2004-04-13 17:10 »
引述: "Judal"

...........
我是說我在學校除了電腦課能用之外
在家不能用,在宿舍也不能用
你要我怎麼燒啊?



你連鍋子都沒有,我們很難教你炒菜的.....
良心建議:
再花兩萬元買一台電腦,
或向好朋友藉電腦,
或花幾十元到網咖用電腦(我沒去過網咖,不確定可否玩linux),
或找同學抄一下答案,記得順便把變數名稱改一下。

dean

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 1279
  • 性別: 男
  • 有些人,有些事,值得.
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #17 於: 2004-04-13 23:04 »
套一句Netman大大的話,方案 and 解決方案
套用一些thyme的方案,綜歸如下..

方案一,趕緊存錢買電腦.
方案二,向好朋友借電腦.
方案三,花幾十元到網咖用電腦(我也不確定可否玩linux).
方案四,找同學抄一下答案,記得順便把變數名稱改一下。
方案五,把握下課時間,把握放學時間,把握日夜間部交替時間,努力的往電腦教室跑,一般學校電腦教室應該都有開放學生研習用吧?! (還記得玩VAX的時代,也是搶下課時間去玩,還借用到別班的時間咧!)

解決方案可能方案四,因為他星期五就要交作業了..^^||
如果學校方便,那方案五也可,如果朋友方便,那方案二也不錯..
如果這些你都不滿意,那你到網咖去,我開SSH給你用putty..

Best solution 是存錢買電腦.如果你真的很想學但卻沒錢就賣力打工,少玩點,多做點.

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17406
    • 檢視個人資料
    • http://www.study-area.org
shell習題.........不會寫Q_Q
« 回覆 #18 於: 2004-04-14 00:39 »
引述: "Judal"
引用
引用
netman  少囉嗦,將你的打字結果貼上來吧....


我.........
真的不知道你要我做什麼..........

我本來要你透過實作看清楚下面兩行差在哪:
[ "$a" = b ]
["$a"=b]

然後我再教你如何作 string test ,
再教你如何用 read ,
接下來如何寫 for loop ,及 break 。

不過,看來我期望太高了...

Judal

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #19 於: 2004-04-14 08:52 »
引用
team Best solution 是存錢買電腦.如果你真的很想學但卻沒錢就賣力打工,少玩點,多做點.


沒時間啊!
我其它的功課都顧不好了
再去打工的話我可能就要21了

引用
team 方案二,向好朋友借電腦.

我們班都沒有人灌linux

引用
team 方案三,花幾十元到網咖用電腦(我也不確定可否玩linux).

哈.....哈.......
我對網咖有不好的回憶
所以不去了

引用
方案五,把握下課時間,把握放學時間,把握日夜間部交替時間,努力的往電腦教室跑,一般學校電腦教室應該都有開放學生研習用吧?! (還記得玩VAX的時代,也是搶下課時間去玩,還借用到別班的時間咧!)


但我們學校一般的電腦只有開放三樓,有灌linux的是在五樓也沒開放.......
如果要灌的話,我還怕灌到一半當機.......

我可能選方案四吧!依我們班的習慣的話,八成是當天就有一堆人在抄了
不過每次看見的板本都是差不多的.......

引用
不過,看來我期望太高了.....

抱歉!辜負你的期望了.........

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17406
    • 檢視個人資料
    • http://www.study-area.org
shell習題.........不會寫Q_Q
« 回覆 #20 於: 2004-04-14 09:28 »
真是拿你沒辦法,下面這段 code 你自己慢慢改吧:
代碼: [選擇]
#!/bin/bash
secret=xyz+abc
for i in 1 2 3; do
        echo -n "Your password: "
        read password
        [ "$password" = "$secret" ] && {
                echo "Good!" ; break; } || {
                [ $i -lt 3 ] && echo "Sorry, try again."
        }
done

Judal

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #21 於: 2004-04-15 15:36 »
謝謝你!
也為了不能被你教說聲「對不起」

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17406
    • 檢視個人資料
    • http://www.study-area.org
shell習題.........不會寫Q_Q
« 回覆 #22 於: 2004-04-15 15:49 »
是否說教對我來說不重要,我所關心的是:
--- 到酷學園來真的學到東西嗎?

我再強調,來這學習技術是次要的,更重要是學習者本身有否得到提升。
若你自己在這裡學不到如何成長,就算問到一萬個答案,也是無用的。

年輕人:多聽一下老人家的話吧,他們並不想害你的。

jou

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 4989
  • 性別: 男
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #23 於: 2004-04-15 16:02 »
N 老的意思是說:您學到了”學習的技巧”了嗎?
我想,其中應該可以解釋為”學習的方法”和”學習的態度”。
這也是我常對我家那兩小蘿葡訓的話。
--
不小心又離題灌水一篇。  ^_^

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #24 於: 2004-04-15 16:21 »
我覺得有時候用笨笨的多copy幾行也蠻方便的。
代碼: [選擇]

#!/bin/bash
pass_ok="123"
[ "$pass_ok" != "$pass" ] && echo "please input your passwd:" && read pass
[ "$pass_ok" != "$pass" ] && echo "Sorry, try again:" && read pass
[ "$pass_ok" != "$pass" ] && echo "Sorry, try again:" && read pass
[ "$pass_ok" = "$pass" ] && echo "Good"

Judal

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #25 於: 2004-04-19 15:33 »
代碼: [選擇]
#! /bin/bash
echo "輸入密碼:"
declare -i i
i=0;
while [$i!=3]
do
read passwd
if [$passwd=ok1234];
then
while [$i!=3]
do
echo "1)顯示硬碟資訊"
echo "2)顯示日期"
echo "3)顯示所有檔案"
echo "4)啟動telnet  <----
echo "5)離開"
echo "請選擇:"
read choice
case $choice in
1)df -k;;
2)date;;
3)ps -ef;;
4)service xineted restart  <-----
5)echo "bye bye"
exit;;
esac;
done
else
i=$i+1
if [$i=3];
then
echo "try again!"
else
echo "password is wrong!"
fi
fi;
done

上面的程式幫我看一下,如果我要加入啟動telnet的功能,是不是就像我箭號所指的寫法一樣?
我會來到酷學園當然是為了學習而來,而且我也是有學到東西的!

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17406
    • 檢視個人資料
    • http://www.study-area.org
shell習題.........不會寫Q_Q
« 回覆 #26 於: 2004-04-19 15:38 »
其它我不說,光下面這個就有問題:
[$i!=3]

還記得我之前說你的毛病在哪了嗎?
-----> 打字不小心﹗
還記得我要你比較哪兩行來著?
-----> [ "$a" = b ]
-----> ["$a"=b]
然後再看你的這行錯在哪?
[$i!=3]

Judal

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #27 於: 2004-04-19 16:08 »
引用
netman 其它我不說,光下面這個就有問題:
[$i!=3]

還記得我之前說你的毛病在哪了嗎?
-----> 打字不小心﹗
還記得我要你比較哪兩行來著?
-----> [ "$a" = b ]
-----> ["$a"=b]
然後再看你的這行錯在哪?
[$i!=3]


我是錯在[ "$i" != "$3" ]沒錯吧?
可我程式是copy我們班的,老師拿來講解時可以執行啊!

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17406
    • 檢視個人資料
    • http://www.study-area.org
shell習題.........不會寫Q_Q
« 回覆 #28 於: 2004-04-19 16:20 »
引述: "Judal"
老師拿來講解時可以執行啊!

我只問一句就好:
----> 你有"實際"上跑過嗎?

Judal

  • 可愛的小學生
  • *
  • 文章數: 23
    • 檢視個人資料
shell習題.........不會寫Q_Q
« 回覆 #29 於: 2004-04-19 16:31 »
有啊!
課堂上跑的啊!