1. Linux shell腳本問題,請高手解答
expr運算中,運算符兩側都要有空格的,除此格式錯誤外其他沒有錯誤!
另外,` `內的命令及shell外部命令(如expr)都會新建子shell去執行,開銷大。強烈建議用shell內建命令let做基本運算。
number=`expr $number + 1`
sum=`expr $sum + $number`
可以改為:
let number+=1
let sum+=number
let支持C語法運算,變數前可以不加$取值符號;支持使用+=運算符,a+=b等同於a=a+b,可以讓代碼更簡潔高效。
用let時運算表達式如果有空格,要放入雙引號中,如:
let sum="sum + number"
2. shell里一個let命令,用sh跑不了,但bash可以,發現bin裡面sh是dash的鏈接,那麼sh和bash功能上什麼區別
sh是shell的最小實現,基本都是符合POSIX標準的。
而bash在POSIX標准基礎上添加了很多擴展語法和功能。
dash是Ubuntu默認的shell,dash與bash的區別網上一搜就有,我記得有一個區別就是dash不支持數組,而bash支持。可以更改Ubuntu的默認shell為bash的。
如果對可移植性有要求,寫腳本還是盡量遵循POSIX標準的語法。雖然bash中有些語法非常方便。
3. shell腳本中 變數 let nume=0什麼意思
let是做整數運算的,這里只是給num賦值為0而已
舉個小例子
a=1
b=2
let c=$a+$b
echo $c
結果$c應該為3
4. 我的shell bash腳本怎麼不支持let命令
這是因為,你的登錄shell,不是默認的bash shell
所以這個let就沒有。
你在終端輸入:chsh
提示輸入口令,就可看到你的登錄shell是什麼了,
如下:
口令:
正在更改 XXXX 的 shell
請輸入新值,或直接敲回車鍵以使用默認值
登錄 Shell [/bin/tcsh]:
你輸入/bin/bash
確認回車,重啟之後,就可以用let了
5. shell腳本求助
問題一:
HWaddr=`ifconfig eth0 | grep HWaddr | awk '{print $NF}'`
說明:用grep獲取包含HWaddr即MAC地址的那行內容,然後通過awk中的$NF獲取最後一個欄位即MAC地址內容。
問題二:
#!/bin/sh
if [ $# -ne 2 ]; then #判斷參數個數,若不等於2提示錯誤及正確用法
echo "Two arguments are required!"
echo "Usage: `basename $0` num1 num2" #basename用於去除腳本路徑僅取腳本名
exit 1
fi
let rtn=$1*$1+$2*$2 #使用shell內建命令let做運算
echo $rtn
exit 0
6. linux shell let語句
你說的是素數吧。。。
shell作運算不太合適
7. shell新手入門 #!/bin/sh as=3 square(){ let"res=$1*$1" echo $res } square $as ~ 怎麼不能跑
let是一個shell命令,後面需要加空格。
letres=$1*$1
這樣就行了。
8. shell中的let不可以這樣用嗎 為什麼我在aix主機上顯示語法錯誤。
(( )) 這種運算符是bash下才支持的,支持類似C風格的運算方式,而sh不支持。
sh下用let,只能類似這樣:let a=5+3,中間是不允許空格的
9. 你好 我是剛才提問shell問題的人 let "number = $number+1"這句怎麼解釋,如果是100條選27條要怎麼寫 謝
既然是隨機,就得用到隨機數了,shell下的隨機數變數是$RANDOM,從0-32767,但你的記錄數只有100條,所以要用余數,下面是一個例子:
#!/bin/bash
i=1
lines=`wc-l<a.txt`#求文件的總行數
touch/tmp/sed.script
while[$i-le27];do
random=$(($RANDOM%$lines+1))
echo"${random}d">>/tmp/sed.script
i=$(($i+1))
done
sed-f/tmp/sed.scripta.txt>b.txt
rm-f/tmp/sed.script
不過這個腳本沒有判斷有可能出現重復的隨機數,需要再改進:
#!/bin/bash
i=1
lines=`wc-l<a.txt`#求文件的總行數
touch/tmp/sed.script1
while[$i-le100];do#得到100個隨機數,實際略大於27即可,不一定要100個
random=$(($RANDOM%$lines+1))
echo"${random}d">>/tmp/sed.script1
i=$(($i+1))
done
#從100個隨機數中去掉重復的,保留27個
uniq/tmp/sed.script1|head-n27>sed.script2
sed-f/tmp/sed.script2a.txt>b.txt
rm-f/tmp/sed.script1
rm-f/tmp/sed.script2
10. linux Shell編程中常用的數學計算方法:expr,let,bc及其他。哪個效率更高一點
從效率來說let==$(()) > expr > bc,這個是絕對的。
let和$(())運行是內建命令,使用相同的演算法。
expr和bc是外部程序,expr的體積幾乎等於bc的1/3,執行一次裝入內存所消耗的時間就不一樣。
從運算能力來說,自然bc排第一位。
其實還有awk,能更好的執行基本運算、匯總、求平均等更復雜的。而且還可以使用數組、哈希表。