1. 程式人生 > >shell指令碼練習(一)

shell指令碼練習(一)

最近學習中遇到了,需要shell指令碼編寫,但是對於shell一竅不通,為了滿足學習需求,同時學會一門指令碼語言的編寫也是很重要的一項能力,對於提高自己有很大的好處。
shell一些常用的基礎知識,上網查查,看了一些基礎,但是不管看多少最終實戰最重要,因此,這裡我整理一些做過的題目問題和常用的問題與基礎知識,供給初學者參考。
1、linux的shell程式設計中#!/bin/sh和$bash是什麼意思
#! /bin/sh 是指此指令碼使用/bin/sh來解釋執行,#!是特殊的表示符,其後面根的是此解釋此指令碼的shell的路徑
$bash $表示系統提示符,$ 表示此使用者為普通使用者,超級使用者的提示符是


bash是shell的一種,是linux下最常用的一種shell。
$bash的意思是執行一個子shell,此子shell為bash。
要注意,在每個指令碼的開頭都使用”#!”,這意味著告訴你的系統這個檔案的執行需要指定一個解 釋器.#!實際上是一個2位元組[1]的魔法數字,這是指定一個檔案型別的特殊標記, 換句話說, 在 這種情況下,指的就是一個可執行的指令碼(鍵入man magic來獲得關於這個迷人話題的更多詳細 資訊).在#!之後接著是一個路徑名.這個路徑名指定了一個解釋指令碼中命令的程式,這個程式可 以是shell,程式語言或者是任意一個通用程式.這個指定的程式從頭開始解釋並且執行指令碼中 的命令(從#!行下邊的一行開始),忽略註釋.[2] 如: 1 #!/bin/sh 2 #!/bin/bash 3 #!/usr/bin/perl 4 #!/usr/bin/tcl 5 #!/bin/sed -f 6 #!/usr/awk -f
注意: #! 後邊給出的路徑名必須是正確的,否則將會出現一個錯誤訊息,通常是 “Command not found”,這將是你執行這個指令碼時所得到的唯一結果.
如果在指令碼的裡邊還有一個#!行,那麼bash將把它認為是一個一般的註釋行.
2、編寫一個shell指令碼,完成功能:

1)顯示文字“Waiting for a while….”
2)長格式顯示當前目錄下面的檔案和目錄,並輸出重定向到/home/file.txt檔案
3)定義一個變數,名為s,初始值“Hello”
4)使該變數輸出重定向到/home/string.txt檔案

#!/bin/bash
echo “Waiting for a while....”
ls -l>home/tem1
a="Hello"
echo $a>/home/tem2

3、編寫一個shell指令碼,它把第二個位置引數及其以後的各個引數指定的檔案複製到第一個位置引數指定的目錄中。
(每次執行shift(不帶引數的),銷燬一個引數,後面的引數前移)

#!/bin/bash
dir=$1
shift
while [$1]
do
file=$1
cp $1 $dir
shift
done
ls $dir

4、編寫一個shell指令碼,利用for迴圈將當前目錄下的.c檔案移動到指定的目錄,並按檔案大小顯示出移動後指定的目錄的內容。

#!/bin/bash
for file in *.c
do
cp ${file}${1}
done
ls ${1}-1S

5、利用陣列形式存放10個城市的名字,然後利用for迴圈把它們打印出來。

#!bin/bash
name=(唐山 北京 天津 保定 秦皇島 廊坊 石家莊 邯鄲 承德 邢臺)
for i in ${name[*]}
do
echo $i
done

6、寫一個指令碼,利用迴圈計算10的階乘

#!/bin/bash
factorial=1
for a in `seq 1 10`
do 
   factorial=`expr $factorial \* ${a}`
done
echo "10!=${factorial}"