shell腳本乘法
#! /bin/bash
[ "$#" -ne 1 ] || [ "$1" -lt 1 ] && echo "用法:$0 <number>" && exit;
for ((i=1;i<=$1;i++))
do
for((j=1;j<=$1;j++))
do
printf "%d*%d=%d\t" $i $j $(let i + j)
done
echo
done
上面是以參數形式運行的
~ $: ./test.sh 3
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
~ $:
希望變成運行時輸入的話使用read -r
------------------------------------------------------
話說我對你們這些拿了東西連謝謝都不說的人表示無奈。。。。
2. 如何學好linux中的shell編程
1、首先建立一個內容如下的文件,名字為date,將其存放在目錄下的bin子目錄中。
#Program date
#usageto ::show the date in this way (注釋)
echo 「Mr.$USER,Today is:」
echo date 「+%B%d%A」
echo 「Whish you a lucky day !」
2、編輯完該文件之後它還不能執行,我們需要給它設置可執行許可權。使用如下命令:
chmod +x date
通過以上過程之後,我們就可以像使用ls命令一樣執行這個shell程序.
[beichen@localhost bin]$ date
Mr.beichen,Today is:
January 13 Friday
Whish you a lucky day !
為了在任何目錄里都可以執行這個程序,可以將bin的這個目錄添加到路徑中去。
[beichen@localhost bin]$ PATH=$PATH:$HOME/bin
(註:這里的$HOME代替的是/home/beichen,而bin目錄是自己建的一個目錄)
另外一種執行date的方法就是把它作為一個參數傳給shell命令:
[beichen@localhost /]$ bash date
Mr.beichen,Today is:
January 13 Friday
Whish you a lucky day !
盡管在前面我們使用chmod +x date將date設置為可執行,其實不設置也沒有關系,但在Linux里執行它,需要先告訴系統它是一個可執行的腳本。
[beichen@localhost /]$ .date
Mr.beichen,Today is:
January 13 Friday
Whish you a lucky day !
即在date前面加上一個點」.」,並且用空格與後面的shell腳本的文件名隔開。當然,不推薦這樣做。
二、shell參數
如同ls 命令可以接受目錄等作為它的參數一樣,在shell編程時同樣可以使用參數。Shell有位置參數和內部參數。
1、 位置參數
由系統提供的參數稱為位置參數。位置參數的值可以用$N得到,N是一個數字,如果為1,即$1.類似C語言中的數組,Linux會把輸入的命令字元串分段並給每段進行標號,標號從0開始。第0號為程序名字,從1開始就表示傳遞給程序的參數。如$0表示程序的名字,$1表示傳遞給程序的第一個參數,以此類推。
2、 內部參數
上述過程中的$0是一個內部變數,它是必須的,而$1則可有可無。和$0一樣的內部變數還有以下幾個。
$# ----傳遞給程序的總的參數數目
$? ----上一個代碼或者shell程序在shell中退出的情況,如果正常退出則返回0,反之為非0值。
$* ----傳遞給程序的所有參數組成的字元串。
下面舉例進行說明:
建立一個內容為如下的程序P1:
echo 「Program name is $0」
echo 「There are totally $# parameters passed to this program」
echo 「The last is $?」
echo 「The parameters are $*」
執行後的結果如下:
[beichen@localhost bin]$ P1 this is a test program //傳遞5個參數
Program name is /home/beichen/bin/P1 //給出程序的完整路徑和名字
There are totally 5 parameters passed to this program //參數的總數
The last is 0 //程序執行結果
The parameters are this is a test program //返回有參數組成的字元串
下面我們利用內部變數和位置參數編寫一個名為del的簡單刪除程序:
#name: del
#author: liangnian
#this program to compress a file to the stbin
if test $# -eq 0
then
echo 「Please specify a file!」
else
gzip $1 //先對文件進行壓縮
mv $1.gz $HOME/stbin //移動到回收站
echo 「File $1 is deleted !」
fi
三、變數表達式
在上面我們編寫的小程序中我們用到了一個關鍵字test,其實它是shell程序中的一個表達式?D?D比較(test)。通過和shell提供的if等條件語句(後面我們會介紹)相結合我們可以方便的完判斷。
其用法如下:
test 表達式
表達式所代表的操作符有字元串操作符、數字操作符、邏輯操作符以及文件操作符。其中文件操作符是一種shell獨特的操作符,因為shell里的變數都是字元串,為了達到對文件進行操作的目的,於是才提供了這樣的一種操作符。
1、 字元串比較
作用:測試字元串是否相等、長度是否為零,字元串是否為NULL(註:bash區分零長度字元串和空字元串)
常用的字元穿操作符有:
= 比較兩個字元串是否相同,同則為「是」!= 比較兩個字元串是否相同,不同則為「是」
-n 比較字元串長度是否大於零,如果大於零則為「是」
-z 比較字元串的穿度是否等於零,如果等於則為「是」
2、 數字比較
這里區別於其他編程語言,test語句不使用>?類似的符號來表達大小的比較,而是用整數式來表示這些。
-eq 相等
-ge 大於等於
-le 小於等於
-ne 不等於
-gt 大於
-lt 小於
3、 邏輯操作! 反:與一個邏輯值相反的邏輯值
-a 與(and):兩個邏輯值為「是」返回值才為「是」,反之為「否」
-o 或(or):兩個邏輯值有一個為「是」,返回值就為「是」
4、 文件操作
文件測試表達式通常是為了測試文件的信息,一般由腳本來決定文件是否應該備份、復制或刪除。由於test關於文件的操作符有很多,我們只列舉一些常用的。
-d 對象存在且為目錄返回值為「是」
-f 對象存在且為文件返回值為「是」
-L 對象存在且為符號連接返回值為「是」
-r 對象存在且可讀則返回值為「是」
-s 對象存在且長度非零則返回值為「是」
-w 對象存在且可寫則返回值為「是」
-x 對象存在且可執行則返回值為「是」
file1 ?Cnt(-ot) file2 文件1比文件2新(舊)
四、循環結構語句
shell常見的循環語句有for循環、while循環、until循環
for 循環
語法:for 變數 in 列表
do
操作
done
註:變數是要在循環內部用來指代當前所指代的列表中的那個對象的。
列表是在for 循環的內部要操作的對象,可以是字元串也可以是文件,如果是文件則為文件名。
例:刪除垃圾箱中的所有.gz文件
#delete all file with extension of 「gz」 in the stbin
for I in $HOME/stbin/*.gz
do
rm ?Cf $i
echo 「$i has been deleted!」
done
執行結果如下:
[beichen@localhost bin]$.f_rmgz
/home/beichen/stbin/nessus-4.0.0.2.tar.gz has been deleted!
/home/beichen/stbin/gftp-2.2.1.tar.gz has been deleted!
3. 求解答關於linux中shell的while腳本用法
#!/bin/sh
num=1
while [ $num -le 10 ]
do
SUM =' expr $num \* $num ' #SUM等號之間不能有空格 ,等號後面語句單引號換成反引號
echo $SUM
num =" expr $num +1 " #這一行雙引號換反引號 ,1與+號之間有空格。
done
shell的語法檢查是比較嚴格的,尤其是空格以後多注意
4. 求幫寫個簡單的shell腳本文件,在線等
#!/bin/sh
i=0
while true
do
let i+=1
[ $i -eq 10 ] && exit 0
$index=`printf "%03d" $i`
command -i ${index}_input -o ${index}_output
while true
do
grep "abcdefg" ${index}_output >/dev/null 2>&1
[ $? -eq 0 ] && break
sleep 1 # usleep 200000 根據command命令執行快慢選用一個合適的值
done
done
5. 編寫一個shell腳本,列印任何數的乘法表
#!/bin/bash
read -p "Please input a integer: " num
for multiplier in {1..9}
do
ret=$((num*multiplier))
echo $num*$multiplier=$ret
done
exit 0