Bashの変数エラー

Bashの変数エラー

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_1dislike1つなので、このコードは正しく機能しますが、21番目のビデオは機能しますlike_01が、Pythonコードに渡すパラメータは21です。

ただし、これはforループ内の同様のクラスの最初のビデオであるため、1でなければなりません。毎回値を印刷します$d。これは毎回2ndを入力することを意味しますif condition。 Pythonコードでは、ビデオ名があり、渡されたlike_012番目の値があることを確認できます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"

おすすめ記事