获取终端大小时候的学习
在写shell脚本时想输出一行占满整个终端屏幕宽度的 横杠
发现for循环会导致执行缓慢
解决方法:
使用yes 命令
sed '50q' 显示50行
tr -d '\n' 删除 \n
多次重复输入相同字符可用yes
yes "2" | sed '50q' | tr -d '\n'
想法来自:打印100个连续的符号,不用循环
--------------------------------------------------------------------------------
stty size (获取终端大小)
stty size|awk '{print $2}'
最终命令:
(指令版)
shellwidth=`stty size|awk '{print $2}'`
# 输出横杠
yes "-" | sed $shellwidth'q' | tr -d '\n'
----------------------------------------------------
(function版)
function getshellwidth() # 这里可以去掉function
{
echo `stty size|awk '{print $2}'`
#return 0 # return是返回 成功或者失败的
#调用的时候只需要上面的输出就行, 他会将标准输出return回来
}
# 这块有个疑问 就是如下面的写法会报错 Inappropriate ioctl for device
# yes "-" | sed `getshellwidth`'q' | tr -d '\n'
----------------------------------------------------
# 输出横杠
shellwidth=`getshellwidth`
yes "-" | sed $shellwidth'q' | tr -d '\n'
(直接显示一行横杠)# 推荐使用本方法
printLine()
{
# 进行判断
if [ ! $1 ]; then
# 没有参数则直接输出 -
outword='-'
else
# 将输入的参数1 赋值给outword
outword=$1
fi
shellwidth=`stty size|awk '{print $2}'`
yes $outword | sed $shellwidth'q' | tr -d '\n'
}
printLine # 直接调用 后面可以跟参数
备注: 获取宽度后最好是将宽度定义为一个新的变量,或者是function 这样获取比较方便
优雅的判断
${COLUMN:-}
例如: ${COLUMN:-1}
如果COLUMN是空变量,或者变量不存在,返回-后面的内容,如果变量有值返回这个值。
备注:
$COLUMNS 在linux 也可以显示行宽,但是放在bash 脚本中 则需要使用 source shell.sh 的格式去编写
因为source 可以直接利用当前环境变量 而bash则是另起一个环境,无法输出(猜想)
总结
以上所述是小编给大家介绍的Linux下使用Shell脚本获取终端宽度的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持!
您可能感兴趣的文章:Linux Crontab Shell脚本实现秒级定时任务的方法分享9个实战及面试常用Linux Shell脚本编写linux shell脚本对未定义变量的判断以及if的用法详解linux环境下编写shell脚本实现启动停止tomcat服务的方法在linux shell脚本中root切换到普通用户执行脚本或命令的方法Linux中shell脚本获取当前工作目录的方法Linux通过Shell脚本命令修改密码的两种方式Linux启动jar包的shell脚本使用Linux shell脚本实现FTP定时执行批量下载指定文件Linux crontab定时执行Shell脚本需要执行特定的命令时解决思路