iT邦幫忙

0

求助unix高手

本人因無學過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

foreach EE (cat /usr/asm/data.0000/mc\_tool/NameList | awk -F" " '{print $1}')
mailx -s "[Restore Fast/Tool]$IDa $ID"_"Restore Fast/Tool $1" $EE@vis.com.tw
else
echo "***************************************"
echo "You don't have the permission to access"
echo "***************************************"
endif

單跑程式1 ,輸入完名字後 ,出現如下所示
Please input your NT ID (lower case only)
pcchi
set: Syntax error

如果不輸入名字 ,直接執行程式1和2 ,出現如下所示
sys.xxxx-xxxxxxx-host-xxxx:/usr/asm/data.0000/mc_tool % FT_restore
ttysw_sigwinch, can't get tty process group: Inappropriate ioctl for device

請問一下是沒辦法一次執行2個程式嗎?如果是那有2個程式該如何寫呢?煩請大大解惑!!感恩!!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
weiclin
iT邦高手 4 級 ‧ 2015-03-04 23:15:40

隨便幫你看了一下

  1. 讀取 input 後面要加分號或斷行

    <pre class="c" name="code">
    分號:
    set ID = $<; if ($ID == yylib || $ID == scyena....

    斷行:
    set ID = $<
    if ($ID == yylib || $ID == scyena....

$IDa哪來的?

&lt;pre class="c" name="code">mailx -s "[Restore Fast/Tool]$IDa 
看更多先前的回應...收起先前的回應...
weiclin iT邦高手 4 級 ‧ 2015-03-04 23:17:48 檢舉

建議你, 在開發時若是用到任何變數, 可以先 echo 出來檢查一下變數值
然後這邊有 csh 的文件, 看對你有沒有幫助
http://www-cs.canisius.edu/ONLINESTUFF/UNIX/shellprogramming.html

高手在人間

9116zm iT邦新手 5 級 ‧ 2015-03-05 02:04:14 檢舉

回應: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

weiclin iT邦高手 4 級 ‧ 2015-03-05 17:05:42 檢舉

9116zm提到:
FT_reinstall | y

你中間那一槓 | 是要當參數? 還是 pipe?
執行兩個程式 ok, 但我想問題在你執行程式的第二行語法有問題
| y 指的是把前半段執行的結果當成 stdin 給 y 這個程式, 你應該不是要這樣吧?

9116zm iT邦新手 5 級 ‧ 2015-03-05 20:35:05 檢舉

回應: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這部分寫進去 ,所以用了( | )指令做連結
看你回應的部分好像是我搞錯語法了對不對!

weiclin iT邦高手 4 級 ‧ 2015-03-05 22:18:51 檢舉

那你應該這樣弄:

&lt;pre class="c" name="code">echo y | exec cmdtool ......
9116zm iT邦新手 5 級 ‧ 2015-03-05 23:12:56 檢舉

回應:weichih
剛剛去測試程式 ,失敗了!!
這個程式一定要進超級使用者 ,剛剛胡亂測試1個小時完全不行
第一個程式執行完跑不到第二個 ,單執行第二個又被權限卡住 ,完全沒想法的try and error
將超級使用者加入進去又出現variable syntax ,程式如下
echo "Please input your NT ID (lower case only)"
set ID = $<
if ($ID == yylib || $ID == scyena || $ID == tychangd || $ID == pcchi || $ID == clyehb || $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
exec cmdtool -M 100000 $/usr/bin/su
exec cmdtool -M 100000 $HOME/bin/sun/install/FT_reinstall then
foreach EE (cat /usr/asm/data.0000/mc\_tool/NameList | awk -F" " '{print $1}')
mailx -s "[Restore Fast/Tool]$ID $DATE"_"Restore Fast/Tool $1" $EE@vis.com.tw

在請問一下 ,像超級使用者的指令放在 /usr/bin/底下 ,那我要去執行它的話 ,上面的寫法是對的嗎?順帶一提基本上在我們設備都知道超級使用者密碼是甚麼 ,所以還是需要寫進去
如果要keyin(Y/N)或是其他像密碼之類的 ,只要在前面加echo就可以了嗎

用yes指令, 參考我寫的介紹:

http://ithelp.ithome.com.tw/question/10158015

weiclin iT邦高手 4 級 ‧ 2015-03-06 00:28:00 檢舉

你越改錯誤越多了喔...
$/usr/bin/su <-- 那個 $ ??
FT_reinstall then <-- 哪來的 then?
你要嘛一開始就用 root 執行 script, 要不然就改用 sudo
基本上你的寫法應該是能動, 但就是小錯誤很多, 而且很多是硬湊出來的感覺

9116zm iT邦新手 5 級 ‧ 2015-03-06 14:46:00 檢舉

回應:weichih
被你發現是硬湊的了 ,因為我沒有unix基礎只是之前因為align 其他廠區硬去學習很基本的指令(因為只要能在公司上執行就好) ,所以這一個也是硬湊出來的
那個then是沒看清楚就附上來給你 ,是我的問題
但基本上還是想從一般使用者直接keyin FT_resotre就能一鍵安裝到底

9116zm iT邦新手 5 級 ‧ 2015-03-06 15:07:52 檢舉

hitomitanaka

剛測試過yes指令 ,很可惜sun unix不支援此指令
yes command not found

weiclin iT邦高手 4 級 ‧ 2015-03-06 16:41:14 檢舉

那你先看看有沒有 sudo 這個指令可用吧, 但很可能是沒有...
要從一般使用者執行有root權限的script, 還有個方法是setuid, 這之前有人跟你提過了

我要發表回答

立即登入回答