【问题标题】:Checking if strings exist in a file (ksh)检查文件中是否存在字符串(ksh)
【发布时间】:2013-04-10 19:27:46
【问题描述】:

这个 KornShell (ksh) 脚本应该做的是在我的 dmesg 中检查磁盘、内部和外部。在 dmesg 输出中,内部驱动器显示为 wd[0-9],外部驱动器显示为 sd[0-9]。我当然没有那么多磁盘,但我希望我的脚本能涵盖尽可能多的可能性。将检查设备 0-9。所以这就是想法:

创建两个大小为 9 的数组,如果 wd0 存在,则通过 dmesg 搜索,如果存在则将内部的第一个元素设为 1,如果 wd1 确实存在,则将数组的第二个元素设为 1,否则为 0。

如果要搜索一个特定的磁盘,例如wd0,我可以这样做:

internal=`dmesg | grep "^wd0" | head -n 1 | cut -d\  -f1`

这让

internal = wd0

但是如何以“循环”的方式检查字符串 wd0-wd9 是否存在于 dmesg 中

# create arrays
set -A internals 0 0 0 0 0 0 0 0 0 
set -A externals 0 0 0 0 0 0 0 0 0

(下面的代码不是ksh代码,而是用类似c的语法来表达这个想法):

for (i=0;i<=8;i++){
    if (wd0) # that is if wd0 exists, if wd1 exists etc.
        internal[i] = 1;
    else
        internal[i] = 0;
}

当然,外部也应遵循相同的过程。

【问题讨论】:

    标签: shell unix scripting ksh


    【解决方案1】:

    我认为以下内容应该可以帮助您前进,但不确定您希望将数组设置为什么值,但这里是:

    #!/bin/ksh
    
    set -A internal 
    
    for i in {0..9}
    do
       echo "Looking for wd"$i
       internal[$i]=`dmesg | grep "^wd$i" | head -n 1 | cut -d\  -f1`
       if [[ ${internal[$i]} = "wd"$i ]];then
         internal[$i]=1
       else
         internal[$i]=0
       fi
    done
    

    【讨论】:

    • 几乎是我需要的,我会根据我的需要进行更改。谢谢。 :)
    猜你喜欢
    • 2012-03-14
    • 2018-08-21
    • 1970-01-01
    • 2011-05-04
    • 2014-12-11
    • 2021-10-07
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多