V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
WhatMelon
V2EX  ›  程序员

shell 问题求助

  •  
  •   WhatMelon · Dec 23, 2022 · 2813 views
    This topic created in 1221 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
        1
    perfectlife  
       Dec 23, 2022
    “怎么统计 core_files 这个变量的数量呢” 这个描述怪怪的
    pheyx
        2
    pheyx  
       Dec 23, 2022
    set -- /home/tmp/core*
    echo $#
    daimubai
        3
    daimubai  
       Dec 23, 2022
    ll | grep -E 'core*' | wc -l
    xingheng
        4
    xingheng  
       Dec 23, 2022   ❤️ 1
    脚本里面尽量不要用 ls ,用 find 替代
    cpstar
        5
    cpstar  
       Dec 23, 2022
    何来优雅,就算拿一坨屎堆出来,只要管用,就行
    zhanglintc
        6
    zhanglintc  
       Dec 23, 2022
    > `nums=`ls -l /home/tmp/core* | wc -l `

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

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

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

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