[英]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中運行。 一些想法:
syntax error: '(' unexpected
(您會得到syntax error: '(' unexpected
)。 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
將在執行時顯示所有行。 $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.