标题: [问题求助] 请问按一定格式输出linux文件系统信息的脚本怎么写啊 [打印本页]
作者: hello163commail 时间: 2014-3-20 15:48 标题: 请问按一定格式输出linux文件系统信息的脚本怎么写啊
比方说:df -m后是这样的信息
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/sda1 29529 3169 24860 12% /
tmpfs 499 1 499 1% /dev/shm
但是我想要这样输出:
{
"data":[
{ "{#FSNAME}":"\/", "{#FSVALUE}":"29529"},
{ "{#FSNAME}":"\/dev/shm", "{#FSVALUE}":"499"},
]
}
作者: DAIC 时间: 2014-3-20 16:23
- #!/bin/bash
- echo {
- echo ' "data":['
- echo " "
- df -mP | awk 'NR>1{print " { \"{#FSNAME}\":\"\\"$6"\", \"{#FSVALUE}\":\""$2"\"},"}'
- echo " ]"
- echo }
复制代码
作者: hello163commail 时间: 2014-3-21 09:56
回复 2# DAIC
如果我再想遇到 /,前面就加个\,又该怎么做呢?
作者: DAIC 时间: 2014-3-21 11:18
回复 3# hello163commail
{
"data":[
{ "{#FSNAME}":"\/", "{#FSVALUE}":"29529"},
{ "{#FSNAME}":"\/dev\/shm", "{#FSVALUE}":"499"},
]
}
是这样吗?
作者: hello163commail 时间: 2014-3-21 12:16
本帖最后由 hello163commail 于 2014-3-21 12:18 编辑
回复 4# DAIC
是的,而且文件系统信息的最后一行没有逗号,像下面这样
{
"data":[
{ "{#FSNAME}":"\/", "{#FSVALUE}":"29529"},
{ "{#FSNAME}":"\/dev\/shm", "{#FSVALUE}":"499"} #这里没有逗号了
]
}
作者: hello163commail 时间: 2014-3-21 12:26
本帖最后由 hello163commail 于 2014-3-21 12:51 编辑
回复 4# DAIC
我写了个:
#!/bin/bash
echo {
echo ' "data":['
echo " "
line=$(df -m|wc -l)
df -mP | awk 'NR>1{printf " { \"{#FSNAME}\":\"\\"$6"\", \"{#FSVALUE}\":\""$2"\"}"}{if(NR>1&&NR<$line){print ","}else{print ""}}'
echo " ]"
echo }
但是不知道怎么弄遇到/就在前面加个\
而且我用$line的时候,第一行"29529"后面也无法输出逗号,直接用数字4,就可以输出逗号。
作者: DAIC 时间: 2014-3-21 17:04
- #!/bin/bash
- echo {
- echo ' "data":['
- echo " "
- df -mP | awk 'NR>1{gsub(/\//,"\\/",$6);print " { \"{#FSNAME}\":\""$6"\", \"{#FSVALUE}\":\""$2"\"},"}' | sed '$s/,$//'
- echo " ]"
- echo }
复制代码
作者: hello163commail 时间: 2014-3-27 16:34
回复 7# DAIC
您好,还想请教个问题,比如说:
想写一个shell脚本,接受从外面来的两个参数,第一个参数是变量$FSNAME,第二个参数是字符串total/used/free等等。
如果外面的参数是$FSNAME,total,那就输出$FSNAME该变量代表的文件系统的总容量,
如果外面的参数是$FSNAME,free,那就输出$FSNAME该变量代表的文件系统的空闲空间。
如果外面的参数是$FSNAME,pfree,那就输出$FSNAME该变量代表的文件系统的空闲空间率。
如果外面的参数是$FSNAME,used,那就输出$FSNAME该变量代表的文件系统的使用闲空间。
如果外面的参数是$FSNAME,pused,那就输出$FSNAME该变量代表的文件系统的使用闲空间率。
这样话,脚本该怎么写呢?
作者: DAIC 时间: 2014-3-27 18:01
回复 8# hello163commail
输出$FSNAME该变量代表的文件系统的总容量,
输出$FSNAME该变量代表的文件系统的空闲空间。
输出$FSNAME该变量代表的文件系统的空闲空间率。
输出$FSNAME该变量代表的文件系统的使用闲空间。
输出$FSNAME该变量代表的文件系统的使用闲空间率。
你把这些代码自己写好,我可以帮你写条件判断。
如果你一点都不会的话,我们再继续讨论。
作者: hello163commail 时间: 2014-3-27 19:34
本帖最后由 hello163commail 于 2014-3-27 19:40 编辑
回复 9# DAIC
假设我的文件系统是这样的:
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/sda1 147647 7824 132323 6% /
tmpfs 1981 1 1981 1% /dev/shm
/dev/sda2 50002 218 47244 1% /home
我写的脚本是下面这样的,主要有几点疑问:
1)grep "$1",这个要加什么符号才是完全匹配(我记得是不是/>之类的符号),比如如果$1是文件系统 /,的话,那会不会匹配到/dev/shm、/home
2)$1,$2是位置变量吗?和awk的$2会不会有冲突?
3)每个输出都有df -m|grep ……,有没更简捷的方法。- #!/bin/bash
- case "$2" in
- total)
- df -m|grep "$1"|awk '{print $2}'
- ;;
- used)
- df -m|grep "$1"|awk '{print $3}'
- ;;
- pused)
- df -m|grep "$1"|awk '{print $5}'
- ;;
- free)
- df -m|grep "$1"|awk '{print $4}'
- ;;
- pfree)
- df -m|grep "$1"|awk '{print $4/$2}'
- ;;
- esac
复制代码
作者: DAIC 时间: 2014-3-27 19:35
回复 10# hello163commail
你这不是自己写完了么,还有问题不?
作者: hello163commail 时间: 2014-3-27 19:41
本帖最后由 hello163commail 于 2014-3-27 19:58 编辑
回复 11# DAIC
1)grep "$1",这个要加什么符号才是完全匹配(我记得是不是/>之类的符号),比如如果$1是文件系统 /,的话,那会不会匹配到/dev/shm、/home
2)$1,$2是位置变量吧。和awk的$2会不会有冲突?
3)每个输出都有df -m|grep ……,有没更简捷的方法。
作者: DAIC 时间: 2014-3-27 21:18
回复 12# hello163commail
1)df -m|grep "$1$"|awk '{print $2}'
2)不会有冲突
3)df不会多次执行,改不改对效率没什么影响
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |