使用for循环的sh shell脚本

使用for循环的sh shell脚本,shell,sh,Shell,Sh,我正在使用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 因为我不熟悉这种

我正在使用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

因为我不熟悉这种语言,所以我希望在同一行中打印前2个结果,如下所示:

文件file1.jpg;文件file2.jpg

文件file3.jpg;文件file4.jpg

在其他语言中,我只使用了d++但它不适用于这种情况

这可行吗?我会很高兴,如果你能提供我的样本代码


提前感谢。

类似于循环中的内容:

echo -n "something; "
[[ -n "$oddeven" ]] && oddeven= || { echo;oddeven=x;}
应该这样做

每行三个大概

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

(使用
n=1
)在进入循环之前。

循环内类似的内容:

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' ls$IMAGE_DIR | egrep'jpg$'| sed-e's/$/;/'-e's/^/file/'-e's/jpg$/pgm/'| perl-pe'$。%2&&chomp'
(perl只是每隔一行删除一行换行符。如果最后一行是奇数,您可能需要插入一个空格并添加一个尾随换行符。)

为什么要使用循环?那么:

ls $IMAGE_DIR | egrep 'jpg$' | sed -e 's/$/;/' -e 's/^/file /' -e 's/jpg$/pgm/' | perl -pe '$. % 2 && chomp' ls$IMAGE_DIR | egrep'jpg$'| sed-e's/$/;/'-e's/^/file/'-e's/jpg$/pgm/'| perl-pe'$。%2&&chomp' (perl只是每隔一行删除一行换行符。如果最后一行是奇数,您可能需要插入一个空格并添加一个尾随换行符。)

将n设置为所需的任何值。 如果您使用的是Solaris,请使用nawk或/usr/xpg4/bin/awk (不要使用/usr/bin/awk)

还要注意,我试图使用标准的shell语法, 鉴于您的问题与sh有关(即您没有提到bash或ksh, 例如)

将n设置为所需的任何值。 如果您使用的是Solaris,请使用nawk或/usr/xpg4/bin/awk (不要使用/usr/bin/awk)

还要注意,我试图使用标准的shell语法, 鉴于您的问题与sh有关(即您没有提到bash或ksh,
例如)。

让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

让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

嗨,我不明白,如果我在一行中添加3个文件会怎么样?那会有所不同,这一个只是切换换行。我将为您添加代码段…嗨,我不明白,如果我在一行中添加3个文件会怎么样?这将是不同的,这一个只是切换换行。我将为您添加代码段…注意:echo有一个'-n'选项用于不添加行尾。注意:echo有一个'-n'选项用于不添加行尾。