5.获取终端信息,设置日期和延时

  • 获取终端信息

编写shell脚本时,免不了处理大量当前终端的相关信息,如行数、列数等。可以使用tput和stty两个工具进行相关处理

    tput
1.tput命令将通过terminfo数据库对终端会话进行初始化和操作(terminfo数据库:Unxi系统上用于定义终端和打印机的属性以及功能)
2.光标属性                                                           文本属性
tput  clear   清屏                                                    0:黑色                     5:洋红色
tput  sc   保存当前光标位置                                   1:蓝色                     6:黄色
tput  civis  光标不可见                                           2:绿色                     7:白色
tput  cnorm  光标可见                                            3:青色
tput  rc   显示输出                                                  4:红色


技巧1   获取终端的行数和列数
  tput   cols             or     stty   size
  tput   lines

技巧2    打印当前终端名
  tput   longname

技巧3   指定移动光标
  tput  cup  10  10   将光标移动到(10,10)

技巧4   设置终端背景色
  tput  setb  n)  n为0~7

技巧5   设置文本前景色
  tput  setf  n)  n为0~7

技巧6   设置文本样式为粗体
  tput  bold

技巧7   设置下划线起止
  tput  suml
  tput  ruml

技巧8   删除当前光标到行尾的内容
  tput   ed)

    stty
-a :以容易阅读的方式打印当前所有的配置
-g :以stty可读方式打印当前所有的配置

stty  iuclc  开启禁止输出大写  ------- stty  -iuclc  关闭
stty  olcuc  开启禁止输出小写 ------ stty  -olcuc  关闭
stty  -echo  禁止输出显示 -------- stty echo  开启
 

  • 获取设置日期和延时

类Unix系统中,日期被存储成一个整数,大小为自世界标准时间(UTC)1972年.1月.1日.0时.0分.0秒起流逝的秒数。计时方式被称为纪元时orUnix时间

  date
-d:解析字符串并按照指定格式输出
-s:根据字符串设置系统时间
-u:显示或设置UTC

技巧1   输出昨天日期
date  -d  "1 day ago" + "%Y-%m-%d"

技巧2  时间格式转化
date -d  "2000-11-11"  +"%Y/%m/%d %H:%M.%S" ------->  2000/11/11 00:00.00

技巧3  打印纪元时
date   +%s

技巧4   输入日期获知礼拜几
date  --date  "Jan 20 2001 "  +%A  ----->  Saturday

技巧5  检查一组命令的耗时
#!/bin/bash
start=$(date +%s)
commands;
statements;

end=$(date +$s)
difference=$(( end - start ))
echo  These commands used $difference seconds.

技巧6  脚本中使用延时
sleep:$ sleep  seconds
#!/bin/bash                            
#   tput  sc  存储光标位置,sleep 2 延时2s ,echo -n 忽略结尾换行符,tput  rc 恢复光标位置,tput  ed 清楚当前光标到行尾的内容。 可以清除之前获得的旧值count写入新值
echo  -n  Count:                            
tput  sc

count=0;
while  true;
do 
     if [ $count  -lt 20 ];
     then
         let  count ++;
         sleep  2;
         tput  rc
         tput  ed
         echo  -n  $count;
     else  exit 0;
     fi
done