shell中read使用后控制台不能删除内容

在Linux中使用read命令时,输入特殊字符如backspace、箭头键等会导致功能失效并显示原始字符。通过添加-e选项,可以解决这个问题,使功能键恢复正常。同时,可以结合-p选项设置提示语句。

Read可以带有-a, -d, -e, -n, -p, -r, -t等等选项。
随便在Linux终端上敲入read命令,如下:

root@bigdata# read
dawd^H^H^H^[[A^[[B^[[D^[[C^[OP^[OQ^[OR^[OS

注:我输入的分别是dawd、backspace键、↑、↓、←、→、F1、F2、F3、F4
看到这些功能键变成了原来的字符组合,并且功能键的功能失效了!
解决办法:
采用 read -e参数

root@bigdata#  read -e
dawd

现在backspace键、↑、↓、←、→、F1、F2、F3、F4都可以使用了

=================================================================================
拓展组合参数:
可以结合 -p 使用提示语句
组合后格式为:

read -ep

其他用法:

read的常用用法如下:

read -[pstnd] var1 var2 ...

-p 提示语句
-n 字符个数
-s 屏蔽回显
-t 等待时间
-d 输入分界

用法举例:

01). read      						# 从标准输入读取一行并赋值给特定变量REPLY
root@linux~# read
Hello,World!
root@linux~
shell脚本中判断端口能否连通有多种方法,以下为你介绍几种常见的方式: #### 使用`timeout`配合`bash`的`/dev/tcp` 此方法可用于批量检测IP的指定端口连通性。以下是一个示例脚本,输入为`ip_list.txt`(每行一个IP地址),将检测结果保存至`port_check_result.txt`: ```bash #!/bin/bash # 检查文件是否存在 if [ ! -f "/root/ip_list.txt" ]; then echo "错误:未找到IP列表文件 ip_list.txt" exit 1 fi # 结果输出文件 OUTPUT="port_check_result.txt" echo "IP地址,443端口状态" > $OUTPUT # 循环处理每个IP while read -r IP; do IP=${IP//[$'\t\r\n']} # 清除换行符 # 使用TCP连接检测 timeout 3 bash -c "echo >/dev/tcp/$IP/443" &>/dev/null if [ $? -eq 0 ]; then # 端口已连通用绿色标识 echo -e "\e[32m $IP:443 端口已连通\e[0m" status="已连通" else # 端口不可达用红色标识 echo -e "\e[31m $IP:443 端口不可达\e[0m" status="不可达" fi # 记录结果 echo "$IP,$status" >> $OUTPUT done < ip_list.txt echo "检测完成,结果已保存至 $OUTPUT" ``` 该脚本会先检查`ip_list.txt`文件是否存在,若存在则逐行读取IP地址,使用`timeout 3 bash -c "echo >/dev/tcp/$IP/443"`尝试连接IP的443端口,根据返回值判断端口是否连通,并将结果输出到控制台和`port_check_result.txt`文件中[^1]。 #### 使用`telnet` 从文件读取IP和端口,先通过`ping`判断主机是否可达,再使用`telnet`测试端口连通性。示例脚本如下: ```bash #!/bin/bash telnets() { # 先ping判断,避免telnet耗时过长 P=`ping -c4 -w3 $1 | grep 'packet loss' | grep -v grep | awk -F',' '{print $3}' | awk -F'%' '{print $1}'` if [ $P -eq 100 ]; then echo "ping不通" echo `date +"%Y.%m.%d %T"` " ping "${1}" 失败" >>telnetresults.txt else echo "telnet开始" # `echo "\035"`和`echo "\015"`分别模拟键盘输入ctrl+] 和回车,quit退出 telnet $1 $2 <<EOF 2>temp.txt 1>&2 `echo "\035"` `echo "\015"` quit EOF echo "telnet结束" RESULT=`cat temp.txt 2>/dev/null | grep "Connection closed" | wc -l` if [ $RESULT -eq 1 ]; then echo `date +"%Y.%m.%d %T"`" telnet "${1}":"${2}" 成功" >>telnetresults.txt else echo `date +"%Y.%m.%d %T"`" telnet "${1}":"${2}" 失败" >>telnetresults.txt fi fi } OLD_IFS="$IFS" IFS=":" # 清空文件使用 echo "" >telnetresults.txt echo "" >temp.txt while read LINE; do array=($LINE) ip=${array[0]} port=${array[1]} telnets $ip $port done <telnetip.txt IFS="$OLD_IFS" ``` 该脚本会从`telnetip.txt`文件中读取IP和端口信息,先使用`ping`命令判断主机是否可达,若可达则使用`telnet`测试端口连通性,并将结果记录到`telnetresults.txt`文件中[^2]。 #### 使用`nc` `nc`(netcat)是一个功能强大的网络工具,可用于测试端口连通性。示例脚本如下: ```bash #!/bin/bash NOW=$(date +%Y-%m-%d\ %H:%M:%S) echo "===开始时间${NOW}" echo "===【A服务需要用到的,确保连通】" AA=" 10.11.12.13:8080 114.114.114.114:53 192.168.11.11:443 140.206.131.122:443 qyapi.weixin.qq.com:443 " for ii in ${AA}; do iia=${ii/:/ } # 替换字符串 tport1=`nc -zvw3 ${iia} 2>/dev/null` if [[ $? -eq 0 ]]; then echo "$iia nc命令端口连通" else echo "$iia nc命令端口连不通!!!" fi done ``` 该脚本会遍历`AA`变量中的IP和端口信息,使用`nc -zvw3`命令测试端口连通性,根据返回值判断端口是否连通,并将结果输出到控制台[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值