• 请不要在回答技术问题时复制粘贴 AI 生成的内容
WhatMelon
V2EX  ›  程序员

shell 问题求助

  •  
  •   WhatMelon · Dec 23, 2022 · 3379 views
    This topic created in 1415 days ago, the information mentioned may be changed or developed.

    在 /home/tmp 下 ls 结果如下

    -rw-r--r--. 1 root root 0 12 月 23 15:50 core.1
    -rw-r--r--. 1 root root 0 12 月 23 15:50 core.2
    

    在脚本中我通过

    core_files=`ls -l  /home/tmp/core*'
    

    怎么统计 core_files 这个变量的数量呢

    最后我是通过

    nums=`ls -l /home/tmp/core* | wc -l `
    

    获取数量的,但是感觉有点 low,有没有优雅的方法呢

    Supplement 1  ·  Dec 23, 2022

    不好意思,描述不是很清楚,我再来一遍吧 在/home/tmp 下ls 得到

    -rw-r--r--. 1 root root  0 12月 23 15:50 core.1
    -rw-r--r--. 1 root root  0 12月 23 15:50 core.2
    -rwxr-xr-x. 1 root root 49 12月 23 17:27 test.sh
    

    test.sh 内容如下

    
    #!/bin/bash
    
    shs=`find ./core* `
    
    echo ${shs[@]}
    
    

    bash test.sh 得到结果如下

    ./core.1 ./core.2
    

    现在是想在脚本里获取到shs这个数组的长度(2) 之前是通过ls -l /home/tmp/core* | wc -l取到的 有什么不需要遍历的方法吗

    Supplement 2  ·  Dec 23, 2022

    同事帮忙解决了 修改后的脚本如下

    #!/bin/bash
    
    shs=(`find ./core* `)
    
    echo ${#shs[@]}
    
    11 replies  •  2022-12-28 17:18:15 +08:00
    perfectlife
    perfectlife
    Dec 23, 2022
    1
    “怎么统计 core_files 这个变量的数量呢” 这个描述怪怪的
    pheyx
    pheyx
    Dec 23, 2022
    2
    set -- /home/tmp/core*
    echo $#
    daimubai
    daimubai
    Dec 23, 2022
    3
    ll | grep -E 'core*' | wc -l
    xingheng
    xingheng
    Dec 23, 2022❤️1
    4
    脚本里面尽量不要用 ls ,用 find 替代
    cpstar
    cpstar
    Dec 23, 2022
    5
    何来优雅,就算拿一坨屎堆出来,只要管用,就行
    zhanglintc
    zhanglintc
    Dec 23, 2022
    6
    > `nums=`ls -l /home/tmp/core* | wc -l `

    这个就是很合理的方式呀,一般都这么用。
    顶多就是改善一下删选 core 的方式,比如 3 楼提到的用 grep 来筛选一下。
    ripperdev
    ripperdev
    Dec 23, 2022
    7
    ```bash
    #!/bin/bash

    shs=`find ./core*`
    echo ${shs[@]}
    echo ${shs} | awk '{print NF}'
    ```
    试试这个?
    wxf666
    wxf666
    Dec 23, 2022
    8
    这种 `shs=(`find ./core* `)` 方式,文件名有空格就出错了。。
    geelaw
    geelaw
    Dec 23, 2022 via iPhone
    9
    正确的做法是

    core_files=( ~(N)/home/tmp/core* )
    echo ${#core_files[@]}

    用 ls 之后计算行数的错误在于文件名可以包含 \n
    neroxps
    neroxps
    Dec 24, 2022
    10
    优雅的方式我怕你一周后回来看这个代码你不知道你自己写的什么。
    sngxx
    sngxx
    Dec 28, 2022
    11
    @xingheng 为啥捏
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1735 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 12:29 · PVG 20:29 · LAX 04:29 · JFK 07:29
    ♥ Do have faith in what you're doing.