簡體   English   中英

Linux Shell腳本中for循環的語法

[英]syntax of for loop in linux shell scripting

我在實現for循環時遇到問題。 執行腳本時出現此錯誤

test1.sh:2:語法錯誤:循環變量錯誤

我不明白這個錯誤。

這是我的劇本

#!/bin/bash
for (( c=1; c<=5; c++ ))
do
echo "Welcome $c times..."
done

誰能告訴我ubuntu中sh(在ubuntu中它鏈接到破折號外殼)shell中for循環的語法?

您可能使用sh而不是bash運行它。 嘗試bash test1.sh./test1.sh如果它是可執行文件),而不是sh test1.sh

標准POSIX Shell僅接受for varname in list的語法

for (( expr1; expr2; expr3 ))的類似於C的for循環語法是一種bashism。

您可以for c in $(seq 1 5)使用標准POSIX shell獲得類似的行為。

您的shell腳本(如圖所示)可以在Korn shell和Bash中運行。 一些想法:

  • shebang后可能需要一個空格(#!/ bin / bash而不是#!/ bin / bash)。 但是,丹尼斯·里奇(Dennis Ritchie)最初指定該空間為可選 此外,這不是您使用Bourne Shell所得到的syntax error: '(' unexpected (您會得到syntax error: '(' unexpected )。
  • 您在Windows系統上嗎? 只是在黑暗中刺傷。 這看起來不像Windows錯誤。
  • 這是Solaris或HP / UX系統嗎? 他們可能未運行Bash的真實版本,也可能未運行舊版本。 但是,即使最舊的Bash版本也可以識別for ((x;y;z))構造。

嘗試這個:

#! /bin/bash
set -vx
echo "Random = $RANDOM"   #Test for bash/Kornshell. Will be blank in other shells
echo \$BASH_VERSINFO[0] = ${BASH_VERSINFO[0]} #Should only work in BASH
echo \$BASH_VERSINFO[1] = ${BASH_VERSINFO[1]}
echo \$BASH_VERSINFO[2] = ${BASH_VERSINFO[2]}
echo \$BASH_VERSINFO[3] = ${BASH_VERSINFO[3]}
echo \$BASH_VERSINFO[4] = ${BASH_VERSINFO[4]}
echo \$BASH_VERSINFO[5] = ${BASH_VERSINFO[5]}
for ((c=0, c<=5, c++))
do
    echo "Welcome $c times"
done
  • set -xv將在執行時顯示所有行。
  • 如果它是BASH或Kornshell,則$RANDOM應該顯示一個值(您的for循環可在任何一個中使用)。
  • {$BASH_VERINFO[x]}僅在確實是BASH的情況下設置。 即使您在使用BASH之后運行Korn shell,這些甚至都沒有設置(與$ SHELL仍然包含bash )。

如果for循環仍然給您帶來麻煩,請將其刪除。 在此腳本中的某個地方,我們將找出您是否真的在執行bash shell。

是什么

ls -l /bin/sh

給你的機器?

sh設為bash的符號鏈接,然后可以執行sh ./test1.sh

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM