我使用 .sh 脚本来读取控制器已安装的固件,并将其与可用固件进行比较(如果需要,还可以在控制器上进行更新)。
为了确保读出有效,我想测试子字符串“ERROR”的响应字符串(由从控制器读取的单独脚本创建)。
我尝试了多种方法来测试子字符串,但到目前为止没有任何效果。我发现的大多数来源都使用 bash,使搜索变得复杂。
编辑:“完整”相关代码
MCU_VER=$($PRG)
echo "SubMCU Firmware version readout:" >> /tmp/version_test_log.txt
echo $MCU_VER >> /tmp/version_test_log.txt
case "$MCU_VER" in
*"ERROR"*)
echo "Error" >> /tmp/version_test_log.txt
FW_READ=0;;
*)
echo "Success" >> /tmp/version_test_log.txt
FW_READ=1;;
esac
let LOOP_CNT=LOOP_CNT+1
echo "Loop count:" >> /tmp/version_test_log.txt
echo $LOOP_CNT >> /tmp/version_test_log.txt
echo "Readout state:" >> /tmp/version_test_log.txt
echo $FW_READ >> /tmp/version_test_log.txt
Run Code Online (Sandbox Code Playgroud)
日志文件如下所示:
SubMCU Firmware version readout:
ERROR: Failed to init GPIO output pin 77
Success
Loop count:
1
Readout state:
1
Run Code Online (Sandbox Code Playgroud)
编辑:代码现在可以工作了。解决方案是案例构造。
我正在使用一个简单的脚本,在我启动 X 会话时启动,以检查我的电池电量,如果它低于固定阈值,则调用systemctl hibernate. 但是,当我用 挂起笔记本电脑时systemctl suspend,脚本显然无法检查电池电量。因此,它可能会完全关闭。
即使笔记本电脑挂起,有没有办法保持脚本运行?
我有4个文件。我需要检查所有文件的行数是否相同。
如果行数不同,我需要检测它并输出,例如:
#file1 - 10 lines, file2 - 9 lines, file3 - 10 lines, file4 - 10 lines
Line are miss matched
Number of lines 10 = 9 = 10 = 10
Run Code Online (Sandbox Code Playgroud)
如果它们相等,我想逐行合并文件,如下所示:
文件:
#file1
10
12
11
#file2
Arun
kamal
babu
#file3
300
200
400
#file4
spot1
spot4
spot5
Run Code Online (Sandbox Code Playgroud)
输出:
Set1
10
Arun
300
spot1
Set2
12
kamal
200
spot4
Set3
11
babu
400
spot5
Run Code Online (Sandbox Code Playgroud)
我的代码:
#
id_name=`cat file2`
echo $id_name
id_list=`cat file1`
echo $id_list
#
id_count=`cat file3`
echo …Run Code Online (Sandbox Code Playgroud) 我正在比较 case 语句中的字符串,如下所示:输入变量可以是 DP KL ...
case $input in
D|P|Q|L1|L2)
val="Hello";;
DD|DE|DF|CA)
val="Hi" ;;
MM|KL||TK|SZ)
val="Bye" ;;
echo $input
Run Code Online (Sandbox Code Playgroud)
输入变量不打印任何东西..
说我有一个 bash 脚本/home/me/test/sh:
#!/bin/bash
# cmd # here is the output of the cmd
pwd echo 'aaa' # /home/me
val=pwd echo 'aaa' # aaa
val=pwd echo 'aaa'$val # aaa
val=pwd echo 'aaa' && echo $val # aaa <and an empty line>
Run Code Online (Sandbox Code Playgroud)
我不太明白这些由空格分隔的 bash 代码是如何工作的。
顺便说一句,我提出这个问题是因为我刚刚安装了 ROS 并setup.sh生成了一个名为 bash 的脚本,我正在阅读这个脚本。有一行如下:
CATKIN_SHELL=bash /opt/ros/kinetic/_setup_util.py >> file.log
Run Code Online (Sandbox Code Playgroud) 我有来自split调用的输出文件
shivi11aa
shivi11ab
Run Code Online (Sandbox Code Playgroud)
(等等。)
我如何将这些现有文件重命名为
output_1
output_2
Run Code Online (Sandbox Code Playgroud)
(等等。)
如果我有 1000 个文件,最后一个应该是output_1000.
我正在使用 RPI 3B
uname -a 返回: 4.14.98-v7+ #1200 armv71
操作系统是 stretch
gcc version is 4.9.3
我正在尝试根据 hackster.io 上的这个项目将我的 RPi 设置为 BLE 网关。我执行了前几个命令:
git clone --recurse-submodules https://github.com/Wolkabout/WolkGateway.git
sudo apt-get install mosquitto cmake python python-pip && python -m pip install conan
Bash 脚本
然后我运行了一个包含以下内容的 bash 脚本 (configure.sh):
!/usr/bin/env bash
cp tools/git/pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
pushd out
conan install -s compiler.libcxx=libstdc++11 --build=missing ..
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..
popd
Run Code Online (Sandbox Code Playgroud)
Bash 脚本的输出
终端输出:
line 21: conan: command not found
Run Code Online (Sandbox Code Playgroud)
第 …
我用来date \+%F\-%T以这种格式显示日期和时间:2019-08-15-21:34:58.
来自man date:
%F完整日期;与 %Y-%m-%d
%T时间相同;与 %H:%M:%S 相同
我承认没有解释\+或\-。
后来我明白反斜杠是转义的,加号是参数前缀,连字符只是一个类似字符串的分隔(日期-时间),
而且,有些人使用更简单的+'%F-%T'或+"%F-%T"代替。
是否有理由在日期参数中使用 + 或 - ?
如何在 shell 脚本中创建一个计数器,当当前目录中的文件超过 8 行时,每次都会增加计数器,然后如何生成两个列表,其中一个包含超过 8 行的文件和其他文件少于 8 行?我试过这个,但我确定那是不正确的。
contor=0
while [ contor -le 100 ]
do
echo $contor
contor=expr $contor + 1
done
Run Code Online (Sandbox Code Playgroud) 假设我有一个名为的目录/tmp/main
,其中有 100 个其他目录。
我想循环遍历这些目录的每个目录,例如制作一个文件 touch test.txt
我如何告诉脚本处理第一个、第二个、第三个等等?