我希望有個如你一般的人
如山間清爽的風
如古城溫暖的光
從清晨到夜晚
由山野到書房
只要最後是你
就好
——張嘉佳 《從你的全世界路過》 一、chars=` seq -s ” ” 100 ` :從1到100,以空格為分隔字元。
擷取字串長度的三種方法: echo ${#chars} #取長度 291 echo $chars|wc -m #292 echo $(expr length "$chars")
二、查看命令啟動並執行時間:
time for i in $(seq 11111);do ./a.out ;done;
這裡我在程式中加了個延時 1 秒。
三、常見數值運算:(( )) let expr bc $[ ] 1、(( ))運算子:
用於執行簡單的整數運算(不能是小數或者字串,bc命令可用於小數計算),除了內嵌雙引號無需轉義。
運算子和C語言基本一樣:
執行個體:
兩個 * 就是冪:
((a=1+2**3-4%3)) //內部定義變數
b=$((1+2**3-4%3))
比較:
echo $((3>2)) // 輸出: 1 (真)
等差數列求和: 1/2 n *(a1+an)
echo $(( 100*(1+100)/2 ))
各種(( ))運算的shell指令碼例子:
\#。/bin/basha=6b=2echo "a-b = $ (( $a - $b ))"echo "a+b = $ (( $a + $b ))"echo "a*b = $ (( $a * $b ))"echo "a/b = $ (( $a / $b ))"echo "a**b = $ (( $a ** $b ))"echo "a%b = $ (( $a % $b ))"
命令列傳參:
把 a=6 和 b=2 改成 a=$1 ,b=$2 :
最簡單的四則運算命令:
echo $(($1$2$3))
2、let
let 和(( ))基本一樣 效率比較低,用得比較少
執行個體:
i=2let i=i+8 (( i = i+8 ))輸出:10去掉let變為定義: i=i+8 echo $i輸出:i+8
3、expr:
三、expr (運算子前後必須有空格)
expr 2 + 2 expr 2 \* 2 expr $[2+3] //中括弧表達方法expr $[2*3]a=3i=`expr $a + 1`
執行個體一:
判斷檔案的副檔名,如果不匹配返回0 。匹配成功返迴文件名字元長度。
expr "test.txt" : ".*\.pub"
執行個體二:
判斷輸入的數是否為整數:
加法正確就是整數($?擷取上一次輸入的傳回值):
read -p -t 7 "please input:" a //-t 7 7秒不輸入就逾時 expr $a + 0 &>/dev/null //丟棄輸出和錯誤 不在螢幕上報錯 [ $? -eq 0 ] && echo int || echo chars
&> 等價於 >/dev/null 2>&1
這樣的寫法.這條命令的意思是將標準輸出和錯誤輸出全部重新導向到/dev/null中,也就是將產生的所有資訊(出錯,標準輸出)丟棄。
加while tree 迴圈
do
done
保證可以連續判斷不退出。 4、bc運算:
bc是一種任意精度的計算語言,注意是一種語言,它提供了一些文法結構,比如條件判斷、迴圈等,可以說是很強大的,=在實際中很少找到需要這個用途的場合 。另外一個用途就是用來進行進位轉換。
上面我們介紹的expr之支援整數運算,但對於浮點運算就無能為力了,而且expr不能進行指數運算,而都有bc這些都不再話下。
參數:
-i 強制互動模式;
-l 使用bc的內建庫,bc裡有一些數學庫,對三角計算等非常實用;
-q 進入bc互動模式時不再輸出版本等多餘的資訊。
特殊變數:
ibase,obase 用於進位轉換。 ibase是輸入的進位,obase是輸出的進位,預設是十進位; scale 小數保留位元,預設保留0位。
首先用命令 bc -l -q 進入互動模式。
$bc -l -qibase=2 /*指定進位轉換的輸入機製為二進位,輸出預設為是十進位*/1010104^2 /*指數運算,註:指數不能為浮點數*/164*a(1) /*計算π值,a()是個函數:arctan()3.14159265358979323844quit /*退出*/
每日編程練習
給某個使用者不斷髮送訊息:
可以用write usrname;建立串連,然後在鍵盤上控制輸入。
/dev/pts是遠程登陸(telnet,ssh等)後建立的控制台裝置檔案所在的目錄。所以你要Crowdsourced Security Testing道他的pts目錄下的編號。
while true do sleep 1 echo "nihao" >/dev/pts/9 done