标签: shell-script

测试 posix shell .sh 脚本中的子字符串(不是 bash)

我使用 .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)

编辑:代码现在可以工作了。解决方案是案例构造。

shell shell-script

-1
推荐指数
1
解决办法
87
查看次数

在计算机处于挂起模式时保持脚本运行

我正在使用一个简单的脚本,在我启动 X 会话时启动,以检查我的电池电量,如果它低于固定阈值,则调用systemctl hibernate. 但是,当我用 挂起笔记本电脑时systemctl suspend,脚本显然无法检查电池电量。因此,它可能会完全关闭。

即使笔记本电脑挂起,有没有办法保持脚本运行?

suspend shell-script battery

-2
推荐指数
1
解决办法
1064
查看次数

我有四个文件,每个文件 10 行,如何获得如下输出

我有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)

scripting perl shell-script

-2
推荐指数
2
解决办法
180
查看次数

在 shell 脚本的情况下比较多个字符串

我正在比较 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)

输入变量不打印任何东西..

string shell-script case

-2
推荐指数
1
解决办法
5747
查看次数

用空格分隔的 bash 脚本命令

说我有一个 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)

bash shell-script

-2
推荐指数
1
解决办法
732
查看次数

重命名拆分创建的文件

我有来自split调用的输出文件

shivi11aa
shivi11ab
Run Code Online (Sandbox Code Playgroud)

(等等。)

我如何将这些现有文件重命名为

output_1
output_2
Run Code Online (Sandbox Code Playgroud)

(等等。)

如果我有 1000 个文件,最后一个应该是output_1000.

linux shell-script

-2
推荐指数
1
解决办法
774
查看次数

柯南:找不到命令

我正在使用 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)

第 …

path python shell-script command

-2
推荐指数
1
解决办法
6972
查看次数

是否有理由在日期参数中使用 \+ 或 \-?

我用来date \+%F\-%T以这种格式显示日期和时间:2019-08-15-21:34:58.

来自man date

%F完整日期;与 %Y-%m-%d
%T时间相同;与 %H:%M:%S 相同

我承认没有解释\+\-

后来我明白反斜杠是转义的,加号是参数前缀,连字符只是一个类似字符串的分隔(日期-时间),
而且,有些人使用更简单的+'%F-%T'+"%F-%T"代替。

是否有理由在日期参数中使用 + 或 - ?

cron shell-script syntax

-2
推荐指数
1
解决办法
136
查看次数

在 shell 脚本中创建一个计数器,当当前目录中的文件超过 8 行时,每次都会增加计数器?

如何在 shell 脚本中创建一个计数器,当当前目录中的文件超过 8 行时,每次都会增加计数器,然后如何生成两个列表,其中一个包含超过 8 行的文件和其他文件少于 8 行?我试过这个,但我确定那是不正确的。

contor=0 
while [ contor -le 100 ] 
do 
      echo $contor 
      contor=expr $contor + 1 
done
Run Code Online (Sandbox Code Playgroud)

command-line bash directory shell-script files

-2
推荐指数
1
解决办法
304
查看次数

如何在目录内的所有目录中运行循环

假设我有一个名为的目录/tmp/main ,其中有 100 个其他目录。

我想循环遍历这些目录的每个目录,例如制作一个文件 touch test.txt

我如何告诉脚本处理第一个、第二个、第三个等等?

bash shell-script directory-structure

-2
推荐指数
1
解决办法
55
查看次数