저는 쉘 프로그래밍을 처음 접했습니다. 저는 쉘 스크립트를 사용하여 파일을 컴파일 .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" :
절대 경로 얻기이노문서.