シェルスクリプトを使用して* inoで終わるファイル名を返すにはどうすればよいですか?

シェルスクリプトを使用して* inoで終わるファイル名を返すにはどうすればよいですか?

私はシェルプログラミングに初めて触れました。私はシェルスクリプトを使ってファイルをコンパイル.ino(ここ:)tb_20200930.inoし、Raspberry Pi 4からControllino MAXI Automation(Arduinoベース)にアップロードします。

#!/bin/bash

echo "compile"
arduino-cli compile -v --fqbn CONTROLLINO_Boards:avr:controllino_maxi_automation ./tb_20200930.ino

echo "workaraound a bug in arduino-cli"
rm -rf ./tb_20200930.CONTROLLINO_Boards.avr.controllino_maxi_automation.hex
cp ./tb_20200930.ino.CONTROLLINO_Boards.avr.controllino_maxi_automation.hex ./tb_20200930.CONTROLLINO_Boards.avr.controllino_maxi_automation.hex

echo "liberate the serial port for upload"
sudo systemctl stop testbench.service

echo "upload to the arduino"
arduino-cli upload -v -p /dev/ttyACM0 --fqbn CONTROLLINO_Boards:avr:controllino_maxi_automation 

echo "start the program on the raspberry pi"
sudo systemctl start testbench.service

このスクリプトを改善して、これ以上変更する必要がないようにしたいと思います。スクリプトから.inoファイルを検索してパラメータとして渡したいです。ファイルが2つ以上の場合、.inoスクリプトはどのファイルをコンパイルする必要があるかを尋ねます。ファイルが見つからない場合は、.inoエラーメッセージが表示されます。頑張った

INOFILE="*.ino"
#echo $INOFILE
stringarray=($INOFILE)
a=0
while [ ${stringarray[$a]} -ge 0 ] 
do                                                                                    

done  
echo ${stringarray[0]}
echo ${stringarray[1]}

空かどうかはどうすればわかりますかstringarray[$a]?タイプは何ですかINOFILE

答え1

これを試して変数を設定してください<path_to_ino_files>

#!/bin/bash
declare -a stringarray
stringarray="$(ls -1 <path_to_ino_files> | grep .ino\$)"

if [ ${#stringarray[@]} -ne 0 ]; then

for inofile in "${stringarray[@]}"
do
   ino="$(realpath "$inofile")"
   arduino-cli compile -v --fqbn CONTROLLINO_Boards:avr:controllino_maxi_automation "$ino"
done
fi 

if [ ${#stringarray[@]} -eq 0 ];配列が空であることを確認してください stringarray[@]。配列のすべての要素を含みます。

for inofile in "${stringarray[@]}":配列を繰り返し、現在の配列値をinofile変数に設定します。

realpath "$inofile" :絶対パスを取得するイノ文書。

関連情報