導航:首頁 > 編程知識 > shell編程done什麼意思

shell編程done什麼意思

發布時間:2025-06-26 16:26:19

『壹』 shell里的for循環怎麼寫

for循環的運作方式,是講串列的元素意義取出,依序放入指定的變數中,然後重復執行含括的命令區域(在do和done 之間),直到所有元素取盡為止。

其中,串列是一些字元串的組合,彼此用$IFS所定義的分隔符(如空格符)隔開,這些字元串稱為欄位。
for的語法結構如下:

1
2
3
4

for 變數 in 串列
do
執行命令
done

說明:

行1,講串列中的欄位迭代放入變數中
行2-4,接著將重復執行do和done之間的命令區域,直到串列中每一個欄位軍處理過為止。
流程圖:

用例1
用for循環在家目錄下創建aaa1-aaa10,然後在aaa1-aaa10創建bbb1-bbb10的目錄

1
2
3
4
5
6
7
8
9
10
11
12

#!/bin/bash
for k in $( seq 1 10 )
do
mkdir /home/kuangl/aaa${k}
cd /home/kuangl/aaa${k}
for l in $( seq 1 10 )
do
mkdir bbb${l}
cd /home/kuangl/aaa${k}
done
cd ..
done

說明:
行2,seq 用於產生從某個數到另外一個數之間的所有整數。
行4,在家目錄下創建文件夾。
行6,在使用一個for循環創建文件夾
測試結果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

[root@test01 kuangl]# ll
total 80
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa1
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa10
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa2
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa3
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa4
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa5
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa6
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa7
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa8
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa9
[root@test01 kuangl]# cd aaa1
[root@test01 aaa1]# ll
total 40
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb1
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb10
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb2
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb3
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb4
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb5
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb6
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb7
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb8
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb9

1

用例2

列出var目錄下各子目錄佔用磁碟空間的大小。

1
2
3
4
5
6
7

#!/bin/bash
DIR="/var"
cd $DIR
for k in $(ls $DIR)
do
[ -d $k ] && -sh $k
done

說明:
行4,對/var目錄中每一個文件,進行for循環處理。
行6,如果/var下的文件是目錄,則使用 -sh計算該目錄佔用磁碟空間的大小。
測試結果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

[root@test01 scripts]# ./var.sh
276M cache
4.0K cvs
84K db
8.0K empty
4.0K ftp
4.0K games
4.0K gdm
21G lib
4.0K local
16K lock
7.4G log
4.0K logs
0 mail
4.0K nis
4.0K opt
4.0K preserve
336K run
3.7G spool
212K tmp
4.1G www
4.0K yp

『貳』 shell語法檢查模式詳解

啟用 verbose 調試模式

在進入本指導的重點之前,讓我們簡要地探索下verbose 模式。它可以用 -v 調試選項來啟用,它會告訴 shell 在讀取時顯示每行。要展示這個如何工作,下面是一個示例腳本來批量將 PNG 圖片轉換成 JPG 格式。

將下面內容輸入(或者復制粘貼)到一個文件中。

#!/bin/bash

#convert

for image in *.png; do

convert "$image" "${image%.png}.jpg"

echo "image $image converted to ${image%.png}.jpg"

done

exit 0

接著保存文件,並用下面的命令使腳本可執行:

$ chmod +x script.sh

我們可以執行腳本並顯示它被 Shell 讀取到的每一行:

$ bash -v script.sh

在 Shell 腳本中啟用語法檢查調試模式

使用 -n 激活語法檢查模式

它會讓 shell 讀取所有的命令,但是不會執行它們,它(shell)只會檢查語法。一旦 shell 腳本中發現有錯誤,shell 會在終端中輸出錯誤,不然就不會顯示任何東西。

激活語法檢查的命令如下:

$ bash -n script.sh

因為腳本中的語法是正確的,上面的命令不會顯示任何東西。所以,讓我們嘗試刪除結束 for 循環的 done 來看下是否會顯示錯誤:

下面是修改過的含有 bug 的批量將 png 圖片轉換成 jpg 格式的腳本。

#!/bin/bash

#script with a bug

#convert

for image in *.png; do

convert "$image" "${image%.png}.jpg"

echo "image $image converted to ${image%.png}.jpg"

exit 0

保存文件,接著運行該腳本並執行語法檢查:

$ bash -n script.sh

從上面的輸出中,我們看到我們的腳本中有一個錯誤,for 循環缺少了一個結束的 done 關鍵字。shell 腳本從頭到尾檢查文件,一旦沒有找到它(done),shell 會列印出一個語法錯誤:

script.sh: line 11: syntax error: unexpected end of file

我們可以同時結合 verbose 模式和語法檢查模式:

$ bash -vn script.sh

我們還可以通過修改腳本的首行來啟用腳本檢查

如下面的例子:

#!/bin/bash -n

#altering the first line of a script to enable syntax checking

#convert

for image in *.png; do

convert "$image" "${image%.png}.jpg"

echo "image $image converted to ${image%.png}.jpg"

exit 0

如上所示,保存文件並在運行中檢查語法:

$ ./script.sh

script.sh: line 12: syntax error: unexpected end of file

此外,我們可以用內置的 set 命令來在腳本中啟用調試模式。

下面的例子中,我們只檢查腳本中的 for 循環語法。

#!/bin/bash

#using set shell built-in command to enable debugging

#convert

#enable debugging

set -n

for image in *.png; do

convert "$image" "${image%.png}.jpg"

echo "image $image converted to ${image%.png}.jpg"

#disable debugging

set +n

exit 0

再一次保存並執行腳本:

$ ./script.sh

總的來說,我們應該保證在執行 Shell 腳本之前先檢查腳本語法以捕捉錯誤。

『叄』 shell中done後跟 < 一個重定向是什麼意思 done < /root/waa/userinfo.dat

while read line

do

done < file

read通過輸入重定向,把file的第一行所有的內容賦值給變數line,循環體內的命令一般包含對變數line的處理;然後循環處理file的第二行、第三行。。。一直到file的最後一行。還記得whilewhile條件循環語句根據其後的命令退出狀態來判斷是否執行循環體嗎?是的,read命令也有退出狀態,當它從文件file中讀到內容時,退出狀態為0,循環繼續驚醒;當read從文件中讀完最後一行後,下次便沒有內容可讀了,此時read的退出狀態為非0,所以循環才會退出。

『肆』 在linux中 「# for i in `ls` ; do su -sh $i ; done 」命令是什麼意思

首先 在命令前面有個 '#'的意思是本句話是注釋彎圓蘆,並不實際執行...
再說你後面語句的意思,for ... in .... ; done是循環結構,ls是查看目錄下的文件,su是以另一個身份($i),來運行一個shell,但問題是su 沒有-sh選項,也就是說你這句話應該有問題才對.
整體分析是遍歷將當前腔賣目錄下的文件,每個文件執行su -sh XXX(這里XXX是當前目錄下的所有文件埋帶),功能尚不明確,還請樓主明示.

『伍』 求高人注釋下linux的shell程序代碼

#!/bin/sh # 指定解釋器
#
#Filename: square.sh # 文件名
int=1 # 定義變數int並初始化為1

#功能:輸出1~5的平方
while [ $int -le 5 ] # int小於5時循環
do
sq=`expr $int \* $int` # 計算int * int
echo $sq # 輸出計算結果
int=`expr $int + 1` # 循環變數加1
done
echo "Job completed" # 輸出結束信息

$ sh square.sh # 執行腳本 square.sh
1 # 輸出結果
4
9
16
25
Job completed

『陸』 linux shell腳本讀取用戶輸入的參數

$# 是傳給腳本的參數個數

$0 是腳本本身的名字
$1是傳遞給該shell腳本專的第一個參屬數
$2是傳遞給該shell腳本的第二個參數
$@ 是傳給腳本的所有參數的列表

例如:

#!/bin/sh
echo "arg_num: $#"
echo "shell_name: $0"
echo "first_arg : $1"
echo "second_arg : $2"
echo "args : $@"

閱讀全文

與shell編程done什麼意思相關的資料

熱點內容
文件里如何加入下劃線 瀏覽:1
文件圖片摳出文字 瀏覽:843
如何手機微信文件 瀏覽:423
雲南買菜的app有哪些 瀏覽:230
犀牛教程網盤 瀏覽:992
蘋果顏色換貨理由 瀏覽:970
公司如何搭建無線網路 瀏覽:182
摔跤吧爸爸英語版本 瀏覽:410
理財通qq卡卷怎麼用 瀏覽:105
賣車找車源用的什麼APP 瀏覽:367
對於網路相當於運輸對於什麼 瀏覽:701
刪除u盤文件如何恢復 瀏覽:951
資料庫前景 瀏覽:420
win764位32位程序 瀏覽:754
提權工具集合rar 瀏覽:739
開心消消樂127版本 瀏覽:644
微信記步紅米note2 瀏覽:285
ftp配置文件修改用戶許可權 瀏覽:213
榮耀下載的app在哪裡找到 瀏覽:17
百度網盤怎麼轉存視頻文件 瀏覽:985

友情鏈接