Linux下使用Shell脚本获取终端宽度的解决方法

获取终端大小时候的学习

在写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脚本获取终端宽度的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • linux环境下编写shell脚本实现启动停止tomcat服务的方法

    第一步:以管理员的身份进入控制台,在指定目录下新建一个shell脚本,我这里命名为tomcat.sh 第二步:编写shell脚本 #!/bin/bash tomcat_home=/usr/tomcat/apache-tomcat-8.0.48 SHUTDOWN=$tomcat_home/bin/shutdown.sh STARTTOMCAT=$tomcat_home/bin/startup.sh case $1 in start) echo "启动$tomcat_home" $STAR

  • Linux中shell脚本获取当前工作目录的方法

    如下: workdir=$(cd $(dirname $0); pwd) 步骤1 dirname $0,取得当前执行的脚本文件的父目录 步骤2 cd到父目录,即进入当前工作目录 步骤3 pwd显示当前工作目录 以上这篇Linux中shell脚本获取当前工作目录的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 在linux shell脚本中root切换到普通用户执行脚本或命令的方法

    需求: 安装deb包,设置程序安装后启动,不需要root权限启动程序 | 不能用root权限启动 其他开机启动选项 方法:root临时降低权限 secUser=`who am i | awk '{print $1}'` #echo $secUser su $secUser -c <指令> > /dev/null 2>&1 & #这一条命令的执行权限是临时的,只在本条语句起作用 id -u # 结果为0,还是root用户权限 附: su --help -c, --co

  • linux shell脚本对未定义变量的判断以及if的用法详解

    环境 操作系统:win10 虚拟机:centos7 需求 因为公司有个脚本,是用于启动程序的,但是每次启动都要手动做如下两个操作: ①先查询之前的进程ID ②杀死之前的,在启动新了 时间长了弄得我很烦躁,所以就琢磨下,把上面的的操作一起整合到启动脚本里去. 最开始我是这么写的: #!/bin/bash echo "ggjob-search..." pid=`ps -ef|grep -w ggjob-search|grep -v grep|grep -v ggjob-search.sh|

  • Linux通过Shell脚本命令修改密码的两种方式

    交互方式修改密码 1. ssh 远程到主机: 2. 切换到root账号: [一般都是切换到root进行密码修改,如果普通用户修改自己的密码,要输入原密码,然后新密码要满足复杂度才OK]: 3. passwd username 使用passwd username 修改 username 的密码: 使用该命令会有提示,即进入了交互界面,输入密码即可. 使用脚本修改密码 很多时候我们可能需要远程执行服务器上的脚本来修改账号密码,此时就没有办法进行交互了. 此时可以使用如下两种方式修改密码: 方式1:

  • 使用Linux shell脚本实现FTP定时执行批量下载指定文件

    使用FTP定时批量下载指定文件的shell脚本,具体实例介绍如下所示: 1.目标FTP服务器地址 #FTP服务器地址 ip=10.19.15.23 2.FTP账号和密码 u=账号 p=密码 3.使用mget结合正则表达式下载文件 #获取昨天日期,为后面下载使用 T=`date -d yesterday +%Y%m%d` 4.连接FTP服务器,到指定路径下下载文件 ftp -n <<EOF open $ip user $u $p binary cd /hour #远程服务器文件目录 lcd /h

  • Linux Crontab Shell脚本实现秒级定时任务的方法

    一.编写Shell脚本crontab.sh #!/bin/bash step=1 #间隔的秒数,不能大于60 for (( i = 0; i < 60; i=(i+step) )); do $(php '/home/www/php/crontab/crontab.php') sleep $step done exit 0 二.crontab -e 输入以下语句,然后:wq 保存退出 # m h dom mon dow command * * * * * /home/www/php/crontab

  • Linux启动jar包的shell脚本

    背景: 项目设备端需要运行jar包程序与服务端进行socket连接并发送数据,每次启动进程时,都需要在Linux终端输入启动jar包的命令,比较繁琐,随之尝试将启动jar包的命令写入shell脚本文件中,实现操作shell脚本启动jar包程序的功能. 编写的socdev.sh脚本文件中命令如下: #启动命令所在目录 HOME='/home/pi/Desktop/java' #获取mac地址(唯一的) mac=`ifconfig | grep eth0 | awk '{print $5}'` st

  • Linux crontab定时执行Shell脚本需要执行特定的命令时解决思路

    由于一些不可抗拒的原因,项目部署后需要定时检测项目是否正常运行,否则将执行重启命令. 在具体实施过程中发现,定时器执行无误,但是重启命令无法正常启动.多方查找发现Shell脚本中的Java命令需要引入环境变量方可正常执行.因此做了一下修改,脚本如下(仅供参考): 1.crontab执行配置 * * * * * cd /项目目录 && ./auto_start.sh >> /log/auto.out 2.Shell脚本 #!/bin/bash #导入环境变量 export LAN

  • 分享9个实战及面试常用Linux Shell脚本编写

    注意事项 1)开头加解释器:#!/bin/bash 2)语法缩进,使用四个空格:多加注释说明. 3)命名建议规则:变量名大写.局部变量小写,函数名小写,名字体现出实际作用. 4)默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域. 5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程. 6)写脚本一定先测试再到生产上. 1 获取随机字符串或数字 获取随机8位字符串: 获取随机8位数字: cksum:打印CRC效验和统计字节 2 定

随机推荐