shell变量问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

shell变量问题

#1

帖子 ps3wifi » 2020-04-01 9:24

自己正在学习shell,想通过shell利用awk统计文本中某些内容出现的次数,用select建立了一个菜单,我想的是有没有办法在菜单中输入的内容,转换为脚本定义的变量,现在脚本只能利用$1 $2带参数来实现统计,zsh count.sh 参数1(a1.txt统计的文本) 参数2(aaa.com统计的内容),我想能不能有办法在select菜单中输入a1.txt,跳入下一个菜单再输入aaa.com显示统计数,主要菜单中输入a1.txt怎么在脚本中定义变量
cat a1.txt
aaa.com
aaa.com
bbb.com
bbb.com
bbb.com
ccc.net
ccc.net
#!/bin/bash
count=`cat $1 |awk '{a[$1]+=1;} END {for(i in a){print a" "i;}}'`
statistics=`echo $count |grep $2`
PS3="Please input Query Domain: "
select item in "Domain"
do
if [ -n "$count" ]; then
echo -e "Query File Statistics\n$statistics"
break
else
echo "Exit Query"
fi
done
exit 0
头像
astolia
论坛版主
帖子: 6456
注册时间: 2008-09-18 13:11

Re: shell变量问题

#2

帖子 astolia » 2020-04-01 10:15

没去看select的文档?你输入的内容放在REPLY变量里。

你这种情况用read就行了

代码: 全选

read -p "file: " filename
echo $filename"
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

Re: shell变量问题

#3

帖子 ps3wifi » 2020-04-01 14:36

astolia 写了: 2020-04-01 10:15 没去看select的文档?你输入的内容放在REPLY变量里。

你这种情况用read就行了

代码: 全选

read -p "file: " filename
echo $filename"
comm1=`cat $filename |awk '{a[$1]+=1;} END {for(i in a){print a" "i;}}' |sort -k 1 -n -r`
if [[ -n $comm1 ]]; then
IFSOLD=$IFS
IFS=,
echo " \"C\" stats"
echo " \"Q\" exit"
read -p "Please input \"C\" or \"Q\" :" input
case $input in
C | c )
read -p "Please Enter stats required name: "
#echo $REPLY
echo $comm1 |grep $REPLY
;;
Q | q )
echo "quit"
;;
esac

else
echo "ok"
fi
IFS=${IFSOLD}
谢谢大佬指点,搞成了low版统计 :Haha ,麻烦问一下大佬平时linux你都看什么书,我买了鸟哥私房菜第四版,linux就该这么学,还有linux命令大全,像对shell感兴趣是不是要学习c语言之类的
头像
astolia
论坛版主
帖子: 6456
注册时间: 2008-09-18 13:11

Re: shell变量问题

#4

帖子 astolia » 2020-04-02 18:09

ps3wifi 写了: 2020-04-01 14:36 麻烦问一下大佬平时linux你都看什么书,我买了鸟哥私房菜第四版,linux就该这么学,还有linux命令大全
平常没有专门去看书。学shell时看的书都是十多年前的事了。常用的东西用的多了自然就熟悉了,不常用的东西也知道到哪里去查就够了。
ps3wifi 写了: 2020-04-01 14:36 像对shell感兴趣是不是要学习c语言之类的
一般的使用不需要。如果想知道shell中管道、重定向之类机制的实现原理,就需要去学linux系统编程。学了之后会更清楚为什么,不去学光靠死记硬背也没差
回复