在 /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,有没有优雅的方法呢
不好意思,描述不是很清楚,我再来一遍吧 在/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取到的 有什么不需要遍历的方法吗
同事帮忙解决了 修改后的脚本如下
#!/bin/bash
shs=(`find ./core* `)
echo ${#shs[@]}
1
perfectlife 2022-12-23 16:29:21 +08:00
“怎么统计 core_files 这个变量的数量呢” 这个描述怪怪的
|
2
pheyx 2022-12-23 16:34:16 +08:00
set -- /home/tmp/core*
echo $# |
3
daimubai 2022-12-23 16:41:10 +08:00
ll | grep -E 'core*' | wc -l
|
4
xingheng 2022-12-23 16:49:39 +08:00 1
脚本里面尽量不要用 ls ,用 find 替代
|
5
cpstar 2022-12-23 16:56:02 +08:00
何来优雅,就算拿一坨屎堆出来,只要管用,就行
|
6
zhanglintc 2022-12-23 17:00:10 +08:00
> `nums=`ls -l /home/tmp/core* | wc -l `
这个就是很合理的方式呀,一般都这么用。 顶多就是改善一下删选 core 的方式,比如 3 楼提到的用 grep 来筛选一下。 |
7
ripperdev 2022-12-23 17:49:08 +08:00
```bash
#!/bin/bash shs=`find ./core*` echo ${shs[@]} echo ${shs} | awk '{print NF}' ``` 试试这个? |
8
wxf666 2022-12-23 19:42:10 +08:00
这种 `shs=(`find ./core* `)` 方式,文件名有空格就出错了。。
|
9
geelaw 2022-12-23 20:05:27 +08:00 via iPhone
正确的做法是
core_files=( ~(N)/home/tmp/core* ) echo ${#core_files[@]} 用 ls 之后计算行数的错误在于文件名可以包含 \n |
10
neroxps 2022-12-24 08:52:07 +08:00
优雅的方式我怕你一周后回来看这个代码你不知道你自己写的什么。
|