<span id="vexk9"><table id="vexk9"></table></span>

      tput

      通過terminfo數據庫對終端會話進行初始化和操作

      補充說明

      tput命令 將通過 terminfo 數據庫對您的終端會話進行初始化和操作。通過使用 tput,您可以更改幾項終端功能,如移動或更改光標、更改文本屬性,以及清除終端屏幕的特定區域。

      什么是 terminfo 數據庫?

      UNIX 系統上的 terminfo 數據庫用于定義終端和打印機的屬性及功能,包括各設備(例如,終端和打印機)的行數和列數以及要發送至該設備的文本的屬性。UNIX 中的幾個常用程序都依賴 terminfo 數據庫提供這些屬性以及許多其他內容,其中包括 vi 和 emacs 編輯器以及 curses 和 man 程序。

      與 UNIX 中的大多數命令一樣,tput 命令既可以用在 shell 命令行中也可以用在 shell 腳本中。為讓您更好地理解 tput,本文首先從命令行講起,然后緊接著講述 shell 腳本示例。

      光標屬性

      在 UNIX shell 腳本中或在命令行中,移動光標或更改光標屬性可能是非常有用的。有些情況下,您可能需要輸入敏感信息(如密碼),或在屏幕上兩個不同的區域輸入信息。在此類情況下,使用 tput 可能會對您有所幫助。

      tput clear # 清屏
      tput sc # 保存當前光標位置
      tput cup 10 13 # 將光標移動到 row col
      tput civis # 光標不可見
      tput cnorm # 光標可見
      tput rc # 顯示輸出
      exit 0
      

      移動光標

      使用 tput 可以方便地實現在各設備上移動光標的位置。通過在 tput 中使用 cup 選項,或光標位置,您可以在設備的各行和各列中將光標移動到任意 X 或 Y 坐標。設備左上角的坐標為 (0,0)。

      要在設備上將光標移動到第 5 列 (X) 的第 1 行 (Y),只需執行 tput cup 5 1。另一個示例是 tput cup 23 45,此命令將使光標移動到第 23 列上的第 45 行。

      移動光標并顯示信息

      另一種有用的光標定位技巧是移動光標,執行用于顯示信息的命令,然后返回到前一光標位置:

      (tput sc ; tput cup 23 45 ; echo “Input from tput/echo at 23/45” ; tput rc)
      

      下面我們分析一下 subshell 命令:

      tput sc
      

      必須首先保存當前的光標位置。要保存當前的光標位置,請包括 sc 選項或“save cursor position”。

      tput cup 23 45
      

      在保存了光標位置后,光標坐標將移動到 (23,45)。

      echo “Input from tput/echo at 23/45”
      

      將信息顯示到 stdout 中。

      tput rc
      

      在顯示了這些信息之后,光標必須返回到使用 tput sc 保存的原始位置。要使光標返回到其上次保存的位置,請包括 rc 選項或“restore cursor position”。

      注意:由于本文首先詳細介紹了通過命令行執行 tput,因此您可能會覺得在自己的 subshell 中執行命令要比單獨執行每條命令然后在每條命令執行之前顯示提示更簡潔。

      更改光標的屬性

      在向某一設備顯示數據時,很多時候您并不希望看到光標。將光標轉換為不可見可以使數據滾動時的屏幕看起來更整潔。要使光標不可見,請使用 civis 選項(例如,tput civis)。在數據完全顯示之后,您可以使用 cnorm 選項將光標再次轉變為可見。

      文本屬性

      更改文本的顯示方式可以讓用戶注意到菜單中的一組詞或警惕用戶注意某些重要的內容。您可以通過以下方式更改文本屬性:使文本加粗、在文本下方添加下劃線、更改背景顏色和前景顏色,以及逆轉顏色方案等。

      要更改文本的顏色,請使用 setb 選項(用于設置背景顏色)和 setf 選項(用于設置前景顏色)以及在 terminfo 數據庫中分配的顏色數值。通常情況下,分配的數值與顏色的對應關系如下,但是可能會因 UNIX 系統的不同而異:

      執行以下示例命令可以將背景顏色更改為黃色,將前景顏色更改為紅色:

      tput setb 6 tput setf 4
      

      要反顯當前的顏色方案,只需執行tput rev

      有時,僅為文本著色還不夠,也就是說,您想要通過另一種方式引起用戶的注意。可以通過兩種方式達到這一目的:一是將文本設置為粗體,二是為文本添加下劃線。

      要將文本更改為粗體,請使用 bold 選項。要開始添加下劃線,請使用 smul 選項。在完成顯示帶下劃線的文本后,請使用 rmul 選項。

      實例

      使輸出的字符串有顏色,底色,加粗:

      #!/bin/bash
      printf $(tput setaf 2; tput bold)'color show\n\n'$(tput sgr0)
      
      for((i=0; i<=7; i++)); do
          echo $(tput setaf $i)"show me the money"$(tput sgr0)
      done
      
      printf '\n'$(tput setaf 2; tput setab 0; tput bold)'background color show'$(tput sgr0)'\n\n'
      
      for((i=0,j=7; i<=7; i++,j--)); do
          echo $(tput setaf $i; tput setab $j; tput bold)"show me the money"$(tput sgr0)
      done
      
      exit 0
      

      輸出格式控制函數:

      #!/bin/bash
      
      # $1 str       print string
      # $2 color     0-7 設置顏色
      # $3 bgcolor   0-7 設置背景顏色
      # $4 bold      0-1 設置粗體
      # $5 underline 0-1 設置下劃線
      
      function format_output(){
          str=$1
          color=$2
          bgcolor=$3
          bold=$4
          underline=$5
          normal=$(tput sgr0)
      
          case "$color" in
              0|1|2|3|4|5|6|7)
                  setcolor=$(tput setaf $color;) ;;
              *)
                  setcolor="" ;;
          esac
      
          case "$bgcolor" in
              0|1|2|3|4|5|6|7)
                  setbgcolor=$(tput setab $bgcolor;) ;;
              *)
                  setbgcolor="" ;;
          esac
      
          if [ "$bold" = "1" ]; then
              setbold=$(tput bold;)
          else
              setbold=""
          fi
      
          if [ "$underline" = "1" ]; then
              setunderline=$(tput smul;)
          else
              setunderline=""
          fi
      
          printf "$setcolor$setbgcolor$setbold$setunderline$str$normal\n"
      }
      
      format_output "Yesterday Once more" 2 5 1 1
      
      exit 0
      

      光標屬性例子:

      #!/bin/bash
      # clear the screen
      tput clear
      # Move cursor to screen location X,Y (top left is 0,0)
      tput cup 3 15
      # set a foreground colour using ANSI escape
      tput setaf 3
      echo "XYX Corp LTD."
      tput sgr0
      tput cup 5 17
      # Set reverse video mode
      tput rev
      echo "M A I N - M E N U"
      tput sgr0
      tput cup 7 15
      echo "1\. User Management"
      tput cup 8 15
      echo "2\. service Management"
      tput cup 9 15
      echo "3\. Process Management"
      tput cup 10 15
      echo "4\. Backup"
      # Set bold mode
      tput bold
      tput cup 12 15
      read -p "Enter your choice [1-4] " choice
      tput clear
      tput sgr0
      tput rc
      
      exit 0
      
      主站蜘蛛池模板: 一本色道久久综合无码人妻| 人人狠狠综合88综合久久| 天天综合天天看夜夜添狠狠玩| 成人综合国产乱在线| 九色综合九色综合色鬼| 99综合电影在线视频好看| 亚洲国产品综合人成综合网站| 亚洲熟女综合色一区二区三区| 亚洲综合精品网站| 色噜噜综合亚洲av中文无码| 天天爱天天做色综合| 综合国产在线观看无码| 色综合久久久无码网中文| 一本色道久久88精品综合| 天天影视色香欲综合久久| 91精品国产综合久| 国产综合在线观看| 亚洲欧洲国产成人综合在线观看| 浪潮AV色综合久久天堂| 亚洲综合av永久无码精品一区二区| 色综合a怡红院怡红院首页| 久久久久一级精品亚洲国产成人综合AV区 | 狠狠综合久久av一区二区| 色综合久久无码五十路人妻| 国产成人精品综合久久久| 国产成人综合亚洲绿色| AV狠狠色丁香婷婷综合久久 | 一本色道久久综合亚洲精品高清| 亚洲综合精品第一页| 亚洲国产美国国产综合一区二区| 伊人激情久久综合中文字幕| 国产成人综合精品一区| 激情综合色五月六月婷婷| 国产综合无码一区二区三区| 伊人久久中文大香线蕉综合| 中文字幕亚洲综合久久菠萝蜜| 情人伊人久久综合亚洲| 人人狠狠综合久久亚洲88| 无码国内精品久久综合88| 亚洲AV综合色区无码一二三区 | 91在线亚洲综合在线|