쉘 스크립트를 사용하여 *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" :절대 경로 얻기이노문서.

관련 정보