如何使用 shell 脚本返回以 *ino 结尾的文件名?

如何使用 shell 脚本返回以 *ino 结尾的文件名?

我是 shell 编程新手。我正在使用一个 shell 脚本来编译.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文件并将其作为参数传递。如果超过 1 个.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" :获取绝对路径伊诺文件。

相关内容