本人因無學過unix指令 ,程式只能用更改的 ,但有一個成是老闆希望能一鍵安裝 ,所以拼湊出了一個執行檔 ,但遇到了一些問題煩請高手幫忙解惑一下 ,程式如下
#!/bin/csh
#Purpose : Fast/Tool re-installation
#Date : 2044/04/22
#Author : pcchi
#File location on /usr/asm/data.0000/mc_tool
#########################################################################
set MN = uname -n | cut -c14-17
set WS = uname -a | cut -c64-
set SAY = /usr/local/bin/say
set DATE = date +"%Y%b%d-%H%M"
set DT = date +"%Y%b%d"
if ( $WS == Ultra-5_10 ) then
set ID = cat /etc/hostname.hme0
else if ( -e /etc/hostname.hme1) then
set ID = cat /etc/hostname.hme1
endif
#########################################################################
echo "Please input your NT ID (lower case only)"
set ID = $< if ($ID == yylib || $ID == scyena || $ID == tychangd || $ID == pcchi || $ID == clyehd || $ID == cpwei || $ID == chhungb || $ID == kltou || $ID == ylyu || $ID == jnliao || $ID == ykhuangb || $ID == chlaic ) then
exec cmdtool -M 100000 $HOME/SM/SM_pas_stop -s <----程式1
exec cmdtool -M 100000 $HOME/bin/sun/install/FT_reinstall | y <---- 程式2
cat /usr/asm/data.0000/mc\_tool/NameList | awk -F" " '{print $1}'
)$EE@vis.com.tw
請問一下是沒辦法一次執行2個程式嗎?如果是那有2個程式該如何寫呢?煩請大大解惑!!感恩!!
隨便幫你看了一下
讀取 input 後面要加分號或斷行
<pre class="c" name="code">
分號:
set ID = $<; if ($ID == yylib || $ID == scyena....
斷行:
set ID = $<
if ($ID == yylib || $ID == scyena....
$IDa哪來的?
<pre class="c" name="code">mailx -s "[Restore Fast/Tool]$IDa
建議你, 在開發時若是用到任何變數, 可以先 echo 出來檢查一下變數值
然後這邊有 csh 的文件, 看對你有沒有幫助
http://www-cs.canisius.edu/ONLINESTUFF/UNIX/shellprogramming.html
高手在人間
回應:weichih
mailx -s "[Restore Fast/Tool]$IDa <-可能有打錯
在請問ㄧ下,二個執行程式可以這樣寫嗎?
exec cmdtool -M 100000 $HOME/SM/SM_pas_stop -s <----程式1
exec cmdtool -M 100000 $HOME/bin/sun/install/FT_reinstall | y <---- 程式2
9116zm提到:
FT_reinstall | y
你中間那一槓 | 是要當參數? 還是 pipe?
執行兩個程式 ok, 但我想問題在你執行程式的第二行語法有問題
| y 指的是把前半段執行的結果當成 stdin 給 y 這個程式, 你應該不是要這樣吧?
回應:weichih
執行exec cmdtool -M 100000 $HOME/bin/sun/install/FT_reinstall這一段
會詢問是否確定安裝(Are you sure you want to reinstall Fast/Tools? (Y/N) [N]:)
要keyin Y ,所以想說能否也將keyin Y這部分寫進去 ,所以用了( | )指令做連結
看你回應的部分好像是我搞錯語法了對不對!
那你應該這樣弄:
<pre class="c" name="code">echo y | exec cmdtool ......
cat /usr/asm/data.0000/mc\_tool/NameList | awk -F" " '{print $1}'
)$EE@vis.com.tw
在請問一下 ,像超級使用者的指令放在 /usr/bin/底下 ,那我要去執行它的話 ,上面的寫法是對的嗎?順帶一提基本上在我們設備都知道超級使用者密碼是甚麼 ,所以還是需要寫進去
如果要keyin(Y/N)或是其他像密碼之類的 ,只要在前面加echo就可以了嗎
用yes指令, 參考我寫的介紹:
你越改錯誤越多了喔...
$/usr/bin/su <-- 那個 $ ??
FT_reinstall then <-- 哪來的 then?
你要嘛一開始就用 root 執行 script, 要不然就改用 sudo
基本上你的寫法應該是能動, 但就是小錯誤很多, 而且很多是硬湊出來的感覺
回應:weichih
被你發現是硬湊的了 ,因為我沒有unix基礎只是之前因為align 其他廠區硬去學習很基本的指令(因為只要能在公司上執行就好) ,所以這一個也是硬湊出來的
那個then是沒看清楚就附上來給你 ,是我的問題
但基本上還是想從一般使用者直接keyin FT_resotre就能一鍵安裝到底
hitomitanaka
剛測試過yes指令 ,很可惜sun unix不支援此指令
yes command not found
那你先看看有沒有 sudo 這個指令可用吧, 但很可能是沒有...
要從一般使用者執行有root權限的script, 還有個方法是setuid, 這之前有人跟你提過了