作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试编写一个脚本来响应作为参数的 -c 输入。它应该以大写形式打印下一个参数。第二个是 -[0-9] 的输入,您可以在其中输入 0 到 9 之间的任何数字。然后应该打印下一个参数,与您输入的数字一样多。
这是我的代码:
function print_info(){
echo mijn CPU-type is: $CPU
echo mijn Totaal beschikbare RAM is: $RAMTOTAAL kB
echo mijn IP-adres is $IP_ADDR en mijn Default Gateway is: $GW
echo momenteel is er $RAMUSEDPROCENT % van mijn geheugen in gebruik
}
while :
do
param=1
params=$#
CPU=$(cat /proc/cpuinfo | grep model | grep name | cut -d: -f2)
RAMTOTAAL=$(free | grep Mem | cut -d: -f2 | awk '{ print $1}')
IP_ADDR=$(ifconfig | grep inet | head -1 | cut -d: -f2 | awk '{print $1}')
GW=$(netstat -nr | awk '{print $2}' | head -3 | awk 'NR == 3 { print $1}')
RAMFREE=$(free | grep Mem | cut -d: -f2 | awk '{ print $3}')
RAMUSED=$(free | grep Mem | cut -d: -f2 | awk '{ print $2}')
RAMUSEDPROCENT=$(($RAMUSED*100/$RAMTOTAAL))
counter=1
while [ "$param" -le "$params" ]
do
case \$$param in
"-c" ) shift; echo \$$param zegt je dat | awk '{print toupper($0)}'; print_info;;
[0-9] ) shift; while [ $counter -lt \$$param ]; do echo \$$param; print_info; done;;
* ) eval echo \$$param zegt je dat; print_info;;
esac
(( param ++ ))
done
done
希望大家能帮帮我。
最佳答案
问题是您错误地使用了位置参数,并且您正在尝试执行您无法执行的双重取消引用。另外,我看到您正在使用 shift
,但您使用的不正确...
处理位置参数的正常方法当然是在循环中。
set -- echo -c foo 4 test
while [ $# -gt 0 ]; do
case "$1" in
-c)
echo second time through the loop, "\$1" == "$1".
echo also, "\$2" == "$2";
shift; shift ;;
[0-9])
echo third time through, "\$1" == "$1" and "\$2" == "$2"
: do stuff
shift; shift ;;
*)
echo first time through the loop, "\$1" == "$1"
shift ;;
esac
done
看看你的结果如何。
关于Linux 庆典 : reacting to -c and -[0-9] in a case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16426796/
我是一名优秀的程序员,十分优秀!