Bashで最初のコードを書いています。 2時間閉じ込められていました。これは私のコードです。
#!/bin/bash
declare -i l=0
declare -i d=0
declare -i s1=0
declare -i s2=0
declare -i t=0
declare -i o=0
declare -i p=0
for i in demo_room/subject_1/?*
do
if [ "${i:0:1}" = "l" ];
then
((l++));
echo "l=$l"
python motempl_n.py $i $l
elif [ "${i:0:1}" = "d" ];
then
((d++));
echo "d=$d"
python motempl_n.py $i $d
elif [ "${i:0:1}" = "o" ];
then
o=$((o+1));
echo "o=$o"
python motempl_n.py $i $o
elif [ "${i:0:1}" = "p" ];
then
p=$((p+1));
python motempl_n.py $i $p
elif [ "${i:0:1}" = "t" ];
then
t=$((t+1));
python motempl_n.py $i $t
elif [ "${i:0:7}" = "slide_1" ];
then
s1=$((s1+1));
python motempl_n.py $i $s1
#elif [ "${i:0:7}" == 'slide_2' ]
else
s2=$((s2+1));
python motempl_n.py $i $s2
fi
done
だからフォルダがありますdemo_room/subject_1
。このフォルダには140のaviビデオがあり、名前は次のとおりです。
20の動画のdislike_01
名前は次のとおりです。dislike_20
20の動画のlike_01
名前は次のとおりです。like_20
20の動画のok_01
名前は次のとおりです。ok_20
20の動画のpoint_01
名前は次のとおりです。point_20
20の動画のslide_1_01
名前は次のとおりです。slide_1_20
20の動画のslide_2_01
名前は次のとおりです。slide_2_20
20の動画のtake_a_picture_01
名前は次のとおりです。take_a_picture_1_20
私がやりたいことは、まず入力ビデオのクラスを見つけてから、Pythonファイルへの入力として表示することです。フォルダの最初の20のビデオsubject_1
はdislike
1つなので、このコードは正しく機能しますが、21番目のビデオは機能しますlike_01
が、Pythonコードに渡すパラメータは21です。
ただし、これはforループ内の同様のクラスの最初のビデオであるため、1でなければなりません。毎回値を印刷します$d
。これは毎回2ndを入力することを意味しますif condition
。 Pythonコードでは、ビデオ名があり、渡されたlike_01
2番目の値があることを確認できます21
。なぜ?これは140のビデオすべてで発生します。
ベストアンサー1
あなたのパス$i
にはフルパス(demo_room/subject_1/file
)が含まれているので、常にで始まりますd
。
次のことができます。
case "${i##*/}" in
(d*) ...;;
(l*) ...;;
(slide1_*) ...;;
...
esac
${i##*/}
$i
一致する位置の前部を削除しました*/
。
さらに、sh / bashには引用パラメータ拡張が必要です。
python motempl_n.py "$i" "$s2"