當前位置:首頁 » 操作系統 » linuxshell循環

linuxshell循環

發布時間: 2022-12-11 11:15:29

1. 關於linux shell 循環語句的問題

#!/bin/sh
read -p "Input an integer: " num
len=`expr length $num` #計算整數的長度
startPos=1
sum=0
FirstLetter=`expr substr $num 1 1`
[ "${FirstLetter}" = "-" ] && startPos=2 #負數的話從第二位開始輸出
while [ $startPos -le $len ]
do
digit=`expr substr $num $startPos 1` #分別取得每一位
echo $digit
let sum+=$digit #累加計算
let startPos+=1
done
echo "sum=$sum"
exit 0

# ===================================
# 上面的推薦答案對於負數有問題,並且會列印很多sum=xx(應該是循環結束才列印的)。
# 為了通用性,我基本都使用符合POSIX標準的語法,沒有使用諸如 ${#num}, ${x:pos:lenght}等bash中的特有語法。

2. 關於linux的shell腳本,無限循環問題

10毫秒起一個java,1秒就起來100個java,
10秒就啟動了1000個java

3. Linux Shell 腳本編程最佳實踐

IT路邊社

前言

與其它的編碼規范一樣,這里所討論的不僅僅是編碼格式美不美觀的問題, 同時也討論一些約定及編碼標准。這份文檔主要側重於我們所普遍遵循的規則,對於那些不是明確強制要求的,我們盡量避免提供意見。

編碼規范對於程序員而言尤為重要,有以下幾個原因:

本文檔中的准則致力於最大限度達到以下原則:

盡管本文檔涵蓋了許多基礎知識,但應注意的是,沒有編碼規范可以為我們回答所有問題,開發人員始終需要再編寫完代碼後,對上述原則做出正確的判斷。

:未明確指明的則默認為必須(Mandatory)

主要參考如下文檔:

僅建議Shell用作相對簡單的實用工具或者包裝腳本。因此單個shell腳本內容不宜太過復雜。

在選擇何時使用shell腳本時時應遵循以下原則:

可執行文件不建議有擴展名,庫文件必須使用 .sh 作為擴展名,且應是不可執行的。

執行一個程序時,無需知道其編寫語言,且shell腳本並不要求具有擴展名,所以更傾向可執行文件沒有擴展名。

而庫文件知道其編寫語言十分重要,使用 .sh 作為特定語言後綴的擴展名,可以和其他語言編寫的庫文件加以區分。

文件名要求全部小寫, 可以包含下劃線 _ 或連字元 - , 建議可執行文件使用連字元,庫文件使用下劃線。

正例:

反例:

源文件編碼格式為UTF-8。避免不同操作系統對文件換行處理的方式不同,一律使用 LF 。

每行最多不超過120個字元。每行代碼最大長度限制的根本原因是過長的行會導致閱讀障礙,使得縮進失效。

除了以下兩種情況例外:

如出現長度必須超過120個字元的字元串,應盡量使用here document或者嵌入的換行符等合適的方法使其變短。

示例:

除了在行結束使用換行符,空格是源文件中唯一允許出現的空白字元。

對從來沒有用到的或者被注釋的方法、變數等要堅決從代碼中清理出去,避免過多垃圾造成干擾。

Bash 是唯一被允許使用的可執行腳本shell。

可執行文件必須以 #!/bin/bash 開始。請使用 set 來設置shell的選項,使得用 bash echo "Process $: Done making $$$."
# 示例7:命令參數及路徑不需要引號 grep -li Hugo /dev/ "$1"
# 示例8:常規變數用雙引號,ccs可能為空的特殊情況可不用引號 git send-email --to "${reviewers}" ${ccs:+"--cc" "${ccs}"}
# 示例9:正則用單引號,$1可能為空的特殊情況可不用引號 grep -cP '([Ss]pecial||?characters*) ${1:+"$1"}
# 示例10:位置參數傳遞推薦帶引號的"$@",所有參數作為單字元串傳遞用帶引號的"$*" # content of t.sh func_t { echo num: $# echo args: 1:$1 2:$2 3:$3 }
func_t "$@" func_t "$*" # 當執行 ./t.sh a b c 時輸出如下: num: 3 args: 1:a 2:b 3:c num: 1 args: 1:a b c 2: 3:

使用 $(command) 而不是反引號。

因反引號如果要嵌套則要求用反斜杠轉義內部的反引號。而 $(command) 形式的嵌套無需轉義,且可讀性更高。

正例:

反例:

條件測試

使用 [[ ... ]] ,而不是 [ , test , 和 /usr/bin/[ 。

因為在 [[ 和 ]] 之間不會出現路徑擴展或單詞切分,所以使用 [[ ... ]] 能夠減少犯錯。且 [[ ... ]] 支持正則表達式匹配,而 [ ... ] 不支持。參考以下示例:

盡可能使用變數引用,而非字元串過濾。

Bash可以很好的處理空字元串測試,請使用空/非空字元串測試方法,而不是過濾字元,讓代碼具有更高的可讀性。正例:

反例:

正例:

反例:

正例:

反例:

文件名擴展

當進行文件名的通配符擴展時,請指定明確的路徑。

當目錄中有特殊文件名如以 - 開頭的文件時,使用帶路徑的擴展通配符 ./* 比不帶路徑的 * 要安全很多。

應該避免使用eval。

Eval在用於分配變數時會修改輸入內容,但設置變數的同時並不能檢查這些變數是什麼。反例:

請使用進程替換或者for循環,而不是通過管道連接while循環。

這是因為在管道之後的while循環中,命令是在一個子shell中運行的,因此對變數的修改是不能傳遞給父shell的。

這種管道連接while循環中的隱式子shell使得bug定位非常困難。反例:

如果你確定輸入中不包含空格或者其他特殊符號(通常不是來自用戶輸入),則可以用for循環代替。例如:

使用進程替換可實現重定向輸出,但是請將命令放入顯式子 shell,而非 while 循環創建的隱式子 shell。例如:

總是檢查返回值,且提供有用的返回值。

對於非管道命令,使用 $? 或直接通過 if 語句來檢查以保持其簡潔。

例如:

當內建命令可以完成相同的任務時,在shell內建命令和調用外部命令之間,應盡量選擇內建命令。

因內建命令相比外部命令而言會產生更少的依賴,且多數情況調用內建命令比調用外部命令可以獲得更好的性能(通常外部命令會產生額外的進程開銷)。

正例:

反例:

載入外部庫文件不建議用使用.,建議使用source,已提升可閱讀性。正例:

反例:

除非必要情況,盡量使用單個命令及其參數組合來完成一項任務,而非多個命令加上管道的不必要組合。常見的不建議的用法例如:cat和grep連用過濾字元串; cat和wc連用統計行數; grep和wc連用統計行數等。

正例:

除特殊情況外,幾乎所有函數都不應該使用exit直接退出腳本,而應該使用return進行返回,以便後續邏輯中可以對錯誤進行處理。正例:

反例:

推薦以下工具幫助我們進行代碼的規范:

原文鏈接:http://itxx00.github.io/blog/2020/01/03/shell-standards/

獲取更多的面試題、腳本等運維資料點擊: 運維知識社區 獲取

腳本之---簡訊轟炸機

腳本之---QQ微信轟炸機

ansible---一鍵搭建redis5.0.5集群

elk7.9真集群docker部署文檔

全球最全loki部署及配置文檔

最強安全加固腳本2.0

一鍵設置iptbales腳本

4. linux shell for 如何循環兩個或者多個變數

標準的多個循環嵌套啊,各類程序語言包括shell都這樣的。

5. Linux的shell腳本for循環怎麼調用位置變數

1、利用$@, $#, $*參數或shift移位參數進行循環
2、例1
#!/bin/sh
while [ $# -gt 0 ]; do
echo $1
shift;
done
3、例2
#!/bin/sh
until (($#==0)); do
echo $1
shift;
done
4、例3
#!/bin/sh
for x in $*;do
echo $x
done
5、例4
#!/bin/sh
for x in $@;do
echo $x
done

6. linux的shell腳本中,如何通過until循環實現 當本目錄下存在restart文件夾的時候進行循環呢

可以使用ls或者find來完成對某個文件夾下所有文件的遍歷
比如使用ls
可以簡單地使用一個通配符來完成
ls 某個目錄/*

也可以使用find來完成
比如
find 某個目錄

自然的也可以寫一個shell腳本來進行遍歷
首先進行一個要遍歷的文件夾
然後循環查看每個文件
如果該文件是一個文件夾的話則進入該文件夾做和上面相同的事件
這樣就可以該整個文件夾內的所有文件進行遍歷了
一個簡單的代碼如下
#!/bin/bash

function show()
{
cd $1

for i in `ls`
do
if [ -d "$i" ]
then
show "$i"
else
echo "$i"
fi
done

cd ..
}

show $1

exit 0

該程序不能遍歷以.開頭的隱藏文件
可以使用ls -a來進行遍歷隱藏文件
遍歷時需要注意.和..這兩個特殊文件

下面是一個簡單的代碼
#!/bin/bash

function show()
{
cd $1

for i in `ls -a`
do
if [ "$i" == "." ] || [ "$i" == ".." ]
then
continue;
fi

if [ -d "$i" ]
then
show "$i"
else
echo "$i"
fi
done

cd ..
}

show $1

exit 0

7. linux shell for循環怎麼寫

for I in list; do
statement
done

I 是變數
list是一個表格 如你可以使用一串用括弧括起來的數,
也可以使用 命令替換 `seq 1 15` 這個命令忘記了,, 有可能是 `seq 15`
[1..15]
表示1-15的數,,

statement 即要執行的語句

for I in [1..10]; do
echo $I
done
這段for循環的含義就是顯示從1~10的所有數字

8. Linux Shell:Shell循環語句

摘要: Linux , Shell

Shell中常用循環有 for , while

for循環只能用於 固定次數 的循環,因此不能無限循環和用於一些在後台守護進程一直運行的程序,語法語句如下

也可以寫成一行,用 ; 分隔

取值列表內元素以空格隔開,如果元素帶有空格則用引號包裹起來,例子如下

輸出如下,可見循環到最後退出循環,引用變數依舊是最後一個取值列表元素

一行的寫法

Shell的for循環也可以採用C語言的寫法,注意是 雙括弧 ,用 分號; 間隔

一個簡單例子

while循環語句結合條件測試使用,語法如下

舉一個例子

在循環中使用條件測試實現復雜的邏輯,例如

也可以使用&&,||一行完成,省去if,fi

Shell的continue,break語句和Python一樣,例子如下
break語句下輸出4

continue語句下輸出4 6 7 8 9 10

常見結合使用的循環體有 序列 , 數組 , 命令行傳參 , 文件目錄和文件

序列通過 seq 命令或者 {begin..end..step} 符號進行定義:

結合for循環使用案例

在Shell中使用小括弧 () 定義數組,數組遍歷使用 [@] 符號,防止元素有空格用雙引號包起來,,例子如下

命令行傳參遍歷使用固定符號 $@ ,如果參數中有空格,用雙引號括起來,例子如下

文件遍歷使用 ls 命令,可以指定目錄,以及通配符匹配

一個雙重循環實現,注意 expr表達式中乘號要加轉移符

(2)將某目錄下大小大於閾值的文件移動到另一個文件
遍歷循環一個目錄,使用awk語法獲得文件大小,將100m以上的文件移動到另一個文件夾

(2)指定開始日期和結束日期完成一個跑批任務
指定一個開始時間和結束時間,while從開始日期一直自增到結束日期循環結束,通過 date -d 񟭕-01-01 1day' +%Y-%m-%d 自增一天

9. linux循環執行命令並顯示結果

1、編寫一個shell腳本,在腳本中編寫循環執行的代碼(可以是死循環),然後在linux上運行這個腳本即可。
2、可以把這個腳本在當前運行,也可以讓這個腳本在後台運行。
3、當前運行的腳本如果要kill掉的話,可以直接ctrl+c;後台運行的腳本要kill掉的話,可以PS查看進程ID號,然後執行「kill 進程ID」命令即可。

10. linux shell腳本的循環下載

#!/bin/bash
#usage:getfileFirstDayLastDay
curday=$2
firstday=$1

while[$firstday-le$curday]
do
echo$curday

lftpusername:[email protected]<<EOF
lcd/ftp_folder
binary
getFile_$curday.csv-oFile_$curday.csv
close
bye
EOF

curday=`date-d"$curday1dayago"+%Y%m%d`
done

直接日期加1的根本沒考慮日期跨月的情況

熱點內容
c語言跳出死循環 發布:2025-05-15 20:06:04 瀏覽:823
a19處理器相當於安卓哪個水平 發布:2025-05-15 20:05:29 瀏覽:638
榮耀9i安卓強行關機按哪個鍵 發布:2025-05-15 20:00:32 瀏覽:749
密碼鎖寫什麼最好 發布:2025-05-15 19:05:31 瀏覽:782
5的源碼是 發布:2025-05-15 19:04:07 瀏覽:719
c語言創建的源文件 發布:2025-05-15 18:54:08 瀏覽:611
3個數字密碼鎖有多少種 發布:2025-05-15 18:49:48 瀏覽:684
壓縮包手機打開 發布:2025-05-15 18:37:34 瀏覽:217
安卓取消耳機模式怎麼取消 發布:2025-05-15 18:24:24 瀏覽:59
氣球怎麼解壓視頻 發布:2025-05-15 18:20:00 瀏覽:783