忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 773 | 回复: 12

[其他] bash shell脚本运行后屏幕输出变异常-回车键和空格键无效 [复制链接]

论坛徽章:
0
发表于 2017-07-03 15:47 |显示全部楼层


有个古怪的问题请教一下大家,我写了一段shell脚本,脚本自身的功能运行正常。但运行完毕后,我按回车键,发现屏幕并没有变成下一行,而是平移,如下所示:

xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$

如果我输入ls 或者pwd按回车键,命令可以正常被执行,但屏幕上却不会显示ls 或pwd的命令。

经过排查,我发现只要注释掉这一段后我的脚本就正常:
SYSTEM=`sudo nmap -O -T Insane $okip`

if (echo $SYSTEM |grep -Eq "linux_kernel"); then
.....

这就让我更加不解了。我只是简单grep一下nmap扫描的结果,为什么会出现这种情况呢?

请问一下我有什么办法修复这个问题吗? 目前只能先exit 退出登陆,然后重新登陆系统。

谢谢大家花时间来看这个!!!!

论坛徽章:
0
发表于 2017-07-03 17:00 |显示全部楼层
本帖最后由 yexingqi 于 2017-07-03 17:02 编辑

贴上我的shell脚本内容:

function nmapallip()
{
#!/bin/bash
#check the hosts belong to win or linux
MAX_THREAD_NUM=50
tmp_fifo_file=/tmp/$$.fifo
mkfifo "$tmp_fifo_file"
exec 9<>"$tmp_fifo_file"
rm "$tmp_fifo_file"
for((i=0;i<$MAX_THREAD_NUM;i++));do
echo
done >&9
while read line2
do
{
read -u 9
{
hostname=`echo $(echo $line2 |awk -F"[;]" '{print $2}')`
okip=`echo $(echo $line2 |awk -F"[;]" '{print $1}'| sed 's/^[ \t]*//g')`


SYSTEM=`sudo nmap -O -T Insane $okip`
........


echo >&9
    }&
}
done <hostlist.txt
wait
exec 9>&-
exit 0
}
nmapallip

论坛徽章:
38
辰龙
日期:2013-08-21 15:45:19寅虎
日期:2014-06-09 12:52:17双鱼座
日期:2014-06-10 12:42:44巨蟹座
日期:2014-06-12 23:17:17戌狗
日期:2014-06-17 09:53:29未羊
日期:2014-10-10 13:45:41申猴
日期:2015-03-03 17:21:37亥猪
日期:2015-03-03 17:22:002015亚冠之广州富力
日期:2015-05-12 16:34:522015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:08平安夜徽章
日期:2015-12-26 00:06:30
发表于 2017-07-03 17:42 |显示全部楼层
本帖最后由 关阴月飞 于 2017-07-03 17:43 编辑

最好贴一下执行过程来看看


另外可以试试reset命令, 应该是可以修复显示的

论坛徽章:
0
发表于 2017-07-03 17:52 |显示全部楼层
本帖最后由 yexingqi 于 2017-07-03 17:53 编辑
关阴月飞 发表于 2017-07-03 17:42
最好贴一下执行过程来看看

您好,谢谢您的回复。

我执行后的结果就是上次说的,运行脚本结束后,按回车键,发现屏幕并没有变成下一行,而是平移,如下所示:

xqye@test-docker:~/odc-scan$ ./3.sh
xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$

如果我输入ls 或者pwd按回车键,命令可以正常被执行,但屏幕上却不会显示ls 或pwd的命令。

xqye@test-docker:~/odc-scan$ /tmp/scan  ### 这里我输入的实际上是pwd的命令,只是屏幕不显示
xqye@test-docker:~/odc-scan$ total 164    ### 这上面我输入的实际上是ls -al命令,只是屏幕不显示
drwxr-xr-x  3 xqye xqye  4096 Jul  3 17:47 .
drwxr-xr-x 52 xqye xqye  12288 Jul  3 17:49 ..
-rwxr-xr-x  1 xqye xqye   776 Jul  3 16:45 3.sh
-rw-r--r--  1 xqye xqye  18145 Jul  3 14:12 7-all-namelist.txt
xqye@test-docker:/tmp/scan$



论坛徽章:
0
发表于 2017-07-03 17:55 |显示全部楼层
本帖最后由 yexingqi 于 2017-07-03 17:57 编辑

您是高手~利害,我迷惑好久了,不如您一句话。
不过输入reset命令后是恢复正常了。请问这是怎么回事呢? 为什么一定要加reset命令呢?
运行脚本后我再手动输入reset才能恢复。当我尝试在脚本上加入reset时是无效果的。

论坛徽章:
38
辰龙
日期:2013-08-21 15:45:19寅虎
日期:2014-06-09 12:52:17双鱼座
日期:2014-06-10 12:42:44巨蟹座
日期:2014-06-12 23:17:17戌狗
日期:2014-06-17 09:53:29未羊
日期:2014-10-10 13:45:41申猴
日期:2015-03-03 17:21:37亥猪
日期:2015-03-03 17:22:002015亚冠之广州富力
日期:2015-05-12 16:34:522015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:08平安夜徽章
日期:2015-12-26 00:06:30
发表于 2017-07-03 18:09 |显示全部楼层
回复 5# yexingqi

应该是脚本里有些不可描述的东东被显示在终端上导致神经错乱,我说的执行过程,是指你脚本的执行过程,  
bash -x  xx.sh


然后脚本最好也能贴全

论坛徽章:
0
发表于 2017-07-03 18:30 |显示全部楼层
关阴月飞 发表于 2017-07-03 18:09
回复 5# yexingqi

应该是脚本里有些不可描述的东东被显示在终端上导致神经错乱,我说的执行过程,是指你 ...

没有贴得太多主要怕大家看得烦。其实是一个很简单的脚本,就是多线程运行nmap的命令,然后根据结果来区分是windows还是linux系统。我这个脚本出来的数据倒是正确的。

#!/bin/bash
## analyze the OS type
LOG=./3-nmap_result.txt
rm -rf $LOG
touch $LOG

function nmapallip()
{
#!/bin/bash
#check the hosts belong to win or linux
MAX_THREAD_NUM=50
tmp_fifo_file=/tmp/$$.fifo
mkfifo "$tmp_fifo_file"
exec 9<>"$tmp_fifo_file"
rm "$tmp_fifo_file"
for((i=0;i<$MAX_THREAD_NUM;i++));do
echo
done >&9
while read line2
do
{
read -u 9
{
   hostname=`echo $(echo $line2 |awk -F"[;]" '{print $2}')`
   okip=`echo $(echo $line2 |awk -F"[;]" '{print $1}'| sed 's/^[ \t]*//g')`
SYSTEM=`sudo nmap -O -T Insane $okip`
echo "system is $SYSTEM"
if (echo $SYSTEM |grep -Eq "linux_kernel"); then
echo "Linux"
echo -e "$hostname;$okip;linux" >> $LOG
elif (echo $SYSTEM |grep -Eq "windows"); then
echo "windows"
echo -e "$hostname;$okip;windows" >> $LOG
elif (echo $SYSTEM |grep -Eq "cisco"); then
echo "cisco"
echo -e "$hostname;$okip;cisco" >> $LOG
else
echo -e "$hostname;$okip;What?" >> $LOG
fi
echo >&9
    }&
}
done <hostlist.txt
wait
exec 9>&-
}
nmapallip



论坛徽章:
38
辰龙
日期:2013-08-21 15:45:19寅虎
日期:2014-06-09 12:52:17双鱼座
日期:2014-06-10 12:42:44巨蟹座
日期:2014-06-12 23:17:17戌狗
日期:2014-06-17 09:53:29未羊
日期:2014-10-10 13:45:41申猴
日期:2015-03-03 17:21:37亥猪
日期:2015-03-03 17:22:002015亚冠之广州富力
日期:2015-05-12 16:34:522015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:08平安夜徽章
日期:2015-12-26 00:06:30
发表于 2017-07-04 08:42 |显示全部楼层
回复 7# yexingqi

cat  -A  hostlist.txt  看看文件内容是啥

论坛徽章:
0
发表于 2017-07-04 10:23 |显示全部楼层
回复 8# 关阴月飞

抱歉忘了给这个信息:cat hostlist.txt
10.10.74.1  ;  pvg-sw-02-vlan
10.10.66.10  ;  perf-rome
10.10.66.11  ;  labt-test-19
10.10.66.12  ;  LAB01

......

都是相同格式的内容。

谢谢您了!

论坛徽章:
38
辰龙
日期:2013-08-21 15:45:19寅虎
日期:2014-06-09 12:52:17双鱼座
日期:2014-06-10 12:42:44巨蟹座
日期:2014-06-12 23:17:17戌狗
日期:2014-06-17 09:53:29未羊
日期:2014-10-10 13:45:41申猴
日期:2015-03-03 17:21:37亥猪
日期:2015-03-03 17:22:002015亚冠之广州富力
日期:2015-05-12 16:34:522015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:08平安夜徽章
日期:2015-12-26 00:06:30
发表于 2017-07-04 10:49 |显示全部楼层
回复 9# yexingqi

脚本文本也看一样,主要是怕你文件格式不对: 用cat -A

cat -A  hostlist.txtcat -A  xxoo.sh
您需要登录后才可以回帖 登录 | 注册

本版积分规则

SACC2017购票6.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP