使用for循环的sh shell脚本
我正在使用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 因为我不熟悉这种
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'选项用于不添加行尾。