获取终端大小时候的学习

学习日期:2018/11/3

问题来源:

在写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脚本获取终端宽度的更多相关文章

  1. Linux下添加shell脚本使得nginx日志每天定时切割压缩

    Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常 ...

  2. Linux下使Shell 命令脱离终端在后台运行

    --Linux下使Shell 命令脱离终端在后台运行------------------------------------2014/02/14你是否遇到过这样的情况:从终端软件登录远程的Linux主 ...

  3. linux下实现shell脚本自动连接mongodb数据库并创建索引

    在linux下创建shell脚本

  4. 2019.11.13课堂实验之用Linux下的shell脚本完成两文本交替输出

    有两个文本如下,实际中并不知道两文本各有多少行: 文本1.txt aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ccccccccccccccccccccccccccc ...

  5. linux下的shell脚本(基本)

    shell有些命令和格式不用老是容易忘,学而时习之,不亦说乎~ 先说明以下内容来自: http://c.biancheng.net/cpp/shell/ ,C语言中文网,请大家支持原作,点击链接查看. ...

  6. linux下的shell脚本

    先说明以下内容来自: http://c.biancheng.net/cpp/shell/ ,C语言中文网,请大家支持原作,点击链接查看. 我写下来只是作为笔记,如果侵权,请留言,立马删除. Shell ...

  7. windows下建立文件的换行符^M导致linux下的shell脚本执行错误的解决方式

    常常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M.这将导致shell脚本执行错误,主要是由于dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主 ...

  8. Linux 下执行Shell 脚本的方式

    Shell 脚本的执行方式通常有如下三种: (1)bash script-name 或者 sh script-name:(2)path/script-name或者./script-name:(3)so ...

  9. linux下的shell脚本的使用

    什么是shell? Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户.这种对话方式可是交互 ...

随机推荐

  1. 实现自定义Session

    1. 回话状态接口 /// <summary> /// 会话状态策略接口 /// </summary> public partial interface ISessionStr ...

  2. Python Socket实现简单web服务器

    #!/usr/bin/python env # coding:utf-8 import socket ip_port = ('127.0.0.1', 80) back_log = 10 buffer_ ...

  3. 我用的是python2,以后加python3的内容

    可能有的不成功,比如print 'abc',这时候确定下python版本,3的方式是print('abc')

  4. 将JSON字典转换为Model文件

    将JSON字典转换为Model文件 1. 一切尽在不言中 2. 源码 https://github.com/YouXianMing/CreateModelFromJson 3. 说明 如果你还在手动写 ...

  5. 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置(转)

    安装根据这个配置的,但是opencv3.0安装不成功,后来改安2.48就可以了. http://blog.csdn.net/poem_qianmo/article/details/19809337/ ...

  6. libcurl同时下载多个文件

    #include <errno.h> #include <stdlib.h> #include <string.h> #ifndef WIN32 #include ...

  7. 第二次作业:找Bug

    引子 我真的想了一个小时,上哪里去找bug.我昨天还留意到一个bug,今天就不见了.灵光不断,我想起来了.我就要找大公司的产品的bug... 第一部分 调研, 评测 体验. <腾讯桌球>是 ...

  8. HBase的常用Java API

    1. 创建HBase表的对象 HBase表的对项名字叫HTable,创建它的方法有很多,常见的有如下: org.apache.hadoop.hbase.client.HTable hTable = n ...

  9. 解决redis-cli command not found问题

    在使用其他服务器连接Redis服务器时,一般使用的语句是 [redis-cli -h IP -p port] 但是早上连接时报错:redis-cli command not found 在redis服 ...

  10. 【bzoj 2839】集合计数

    权限题 根据广义容斥的套路就很好做了 设\(g_i\)表示交集至少有\(i\)个元素,\(f_i\)表示交集恰好有\(i\)个元素 显然有 \[g_i=\sum_{j=i}^n\binom{j}{i} ...