簡體   English   中英

使用for循環的sh shell腳本

[英]sh shell script of working with for loop

我正在使用sh shell腳本讀取文件夾的文件並在屏幕上顯示:

for d in `ls -1 $IMAGE_DIR | egrep "jpg$"`
do
  pgm_file=$IMAGE_DIR/`echo $d | sed 's/jpg$/pgm/'`

  echo "file  $pgm_file";
done

輸出結果是逐行讀取:

文件file1.jpg

文件file2.jpg

文件file3.jpg

文件file4.jpg

因為我不熟悉這種語言,所以我希望得到將前兩個結果打印在同一行中的結果,如下所示:

文件file1.jpg; 文件file2.jpg;

文件file3.jpg; 文件file4.jpg;

在其他語言中,我只使用了d ++,但在這種情況下不起作用。

這可行嗎? 如果您願意提供示例代碼,我會很高興。

提前致謝。

讓Shell為您做更多的工作:

end_of_line=""
for d in "$IMAGE_DIR"/*.jpg
do
  file=$( basename "$d" )
  printf "file %s; %s" "$file" "$end_of_line"
  if [[ -z "$end_of_line" ]]; then
    end_of_line=$'\n'
  else
    end_of_line=""
  fi

  pgm_file=${d%.jpg}.pgm
  # do something with "$pgm_file"
done
for d in "$IMAGE_DIR"/*jpg; do
  pgm_file=${d%jpg}pgm
  printf '%s;\n' "$d"
done |
  awk 'END { 
        if (ORS != RS)
          print RS
          }
       ORS = NR % n ? FS : RS
       ' n=2

將n設置為所需的任何值。 如果您使用的是Solaris ,請使用nawk/ usr / xpg4 / bin / awk (請勿使用/ usr / bin / awk )。

還要注意,鑒於您的問題與sh有關(例如,您沒有提及bashksh ),我正在嘗試使用標准的shell語法。

循環內是這樣的:

echo -n "something; "
[[ -n "$oddeven" ]] && oddeven= || { echo;oddeven=x;}

應該做。

每行三個

[[ "$((n++%3))" = 0 ]] && echo

(其中n=1 )進入循環。

為什么要使用循環? 怎么樣:

ls $IMAGE_DIR | egrep 'jpg$' |
   sed -e 's/$/;/' -e 's/^/file /' -e 's/jpg$/pgm/' |
   perl -pe '$. % 2 && chomp'

(perl只會刪除所有其他換行符。如果最后一行是奇數,則可能要插入空格並添加尾隨的換行符。)

暫無
暫無

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

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