偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

圣誕節(jié)快樂!教你用Shell腳本實現(xiàn)一顆圣誕樹!

開發(fā) 前端
變量是任何一種編程語言都必不可少的組成部分,變量用來存放各種數(shù)據(jù)。腳本語言在定義變量時通常不需要指明類型,直接賦值就可以,Shell 變量也遵循這個規(guī)則。

[[441868]]

那么要如何才能編寫出這個特效的圣誕樹呢?

下面一口君手把手教大家!

只想運行腳本的同學(xué)可以跳到最后面!

一、shell腳本知識

1. shell變量

變量是任何一種編程語言都必不可少的組成部分,變量用來存放各種數(shù)據(jù)。腳本語言在定義變量時通常不需要指明類型,直接賦值就可以,Shell 變量也遵循這個規(guī)則。Shell 支持以下三種定義變量的方式:

  1. variable=value 
  2. variable='value' 
  3. variable="value" 

variable 是變量名,value 是賦給變量的值。如果 value 不包含任何空白符(例如空格、Tab 縮進(jìn)等),那么可以不使用引號;如果 value 包含了空白符,那么就必須使用引號包圍起來。使用單引號和使用雙引號也是有區(qū)別的,稍后我們會詳細(xì)說明。

注意,賦值號=的周圍不能有空格,這可能和你熟悉的大部分編程語言都不一樣。

Shell 變量的命名規(guī)范和大部分編程語言都一樣:

  • 變量名由數(shù)字、字母、下劃線組成;
  • 必須以字母或者下劃線開頭;
  • 不能使用 Shell 里的關(guān)鍵字(通過 help 命令可以查看保留關(guān)鍵字)。

使用變量

使用一個定義過的變量,只要在變量名前面加美元符號$即可,如:

  1. skill="C、Linux" 
  2. echo "I am good at ${skill}Script" 

變量名外面的花括號{ }是可選的,加不加都行,加花括號是為了幫助解釋器識別變量的邊界. 如果不給 skill 變量加花括號,寫成echo "I am good at $skillScript",解釋器就會把 $skillScript 當(dāng)成一個變量(其值為空),代碼執(zhí)行結(jié)果就不是我們期望的樣子了。

修改變量的值

  1. lin=2 
  2. let lin++ 

單引號和雙引號的區(qū)別

定義變量時,變量的值可以由單引號' '包圍,也可以由雙引號" "包圍,它們到底有什么區(qū)別呢?不妨以下面的代碼為例來說明:

  1. #!/bin/bash 
  2. name="一口Linux" 
  3. gzh1='公眾號:${name}' 
  4. gzh2="C語言中文網(wǎng):${name}" 
  5. echo $gzh1 
  6. echo $gzh2 

運行結(jié)果:

  1. 公眾號:${name
  2. 公眾號:一口Linux 

以單引號' '包圍變量的值時,單引號里面是什么就輸出什么,即使內(nèi)容中有變量和命令(命令需要反引起來)也會把它們原樣輸出。這種方式比較適合定義顯示純字符串的情況,即不希望解析變量、命令等的場景。

以雙引號" "包圍變量的值時,輸出時會先解析里面的變量和命令,而不是把雙引號中的變量名和命令原樣輸出。這種方式比較適合字符串中附帶有變量和命令并且想將其解析后再輸出的變量定義。

建議:如果變量的內(nèi)容是數(shù)字,那么可以不加引號;如果真的需要原樣輸出就加單引號;其他沒有特別要求的字符串等最好都加上雙引號,定義變量時加雙引號是最常見的使用場景。

2. trap

trap命令是專用于捕捉信號的。比如像ctrl+c發(fā)送給終端的中斷信號等等。在捕捉到信號之后,可以進(jìn)行一系列的操作。

用法:

  1. trap  'COMMAND' INT      

COMMAND表示trap命令接收到INT信號后要執(zhí)行的動作什么。

可以捕捉的信號有:HUP INT等 不適用捕捉的信號:KILL TERM

信號回應(yīng)方式

trap捕捉到信號之后,可以有三種反應(yīng)方式:

1、執(zhí)行一段程序來處理這一信號

2、接受信號的默認(rèn)操作

3、忽視這一信號

它有三種形式分別對應(yīng)三種不同的信號回應(yīng)方式 第一種:

  1. trap ""commands"" signal-list 

當(dāng)腳本收到signal-list清單內(nèi)列出的信號時,trap命令執(zhí)行雙引號中的命令.

第二種:

  1. trap signal-list 

trap不指定任何命令,接受信號的默認(rèn)操作.默認(rèn)操作是結(jié)束進(jìn)程的運行. 第三種:

  1. trap "" "" signal-list 

trap命令指定一個空命令串,允許忽視信號.

使用trap -l命令可以查看信號有哪些:

  1. # trap -l 
  2.  1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP 
  3.  6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1 
  4. 11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM 
  5. 16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP 
  6. 21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ 
  7. 26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR 
  8. 31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3 
  9. 38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8 
  10. 43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13 
  11. 48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12 
  12. 53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7 
  13. 58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2 
  14. 63) SIGRTMAX-1    64) SIGRTMAX 

3. clear

清除終端屏幕

4. tput

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

光標(biāo)屬性

  1. tput sc          ##記錄光標(biāo)位置 
  2. tput cup x y     ###移動光標(biāo)至x列y行 
  3. tput rc          ##返回光標(biāo)位置 
  4. tput civis       ##隱藏光標(biāo) 
  5. tput cnorm       ## 顯示光標(biāo) 
  6. tput setaf ColorNumber ## 設(shè)置前景色 
  7. tput setab ColorNumber ##設(shè)置背景色 
  8. tput clear      # 清除屏幕 
  9. tput cup x y    # 光標(biāo)按設(shè)定坐標(biāo)點移動 

文本屬性

  1. tput blink      # 文本閃爍 
  2. tput bold       # 文本加粗 
  3. tput el         # 清除到行尾 
  4. tput smso       # 啟動突出模式 
  5. tput rmso       # 停止突出模式 
  6. tput smul       # 下劃線模式 
  7. tput rmul       # 取消下劃線模式 
  8. tput sgr0       # 恢復(fù)默認(rèn)終端 
  9. tput rev        # 反相終端 

此外,還可以改變文本的顏色

  1. tput setb 顏色代號 
  2. tput setf 顏色代號 

舉例

  1. #加粗 
  2. bold=$(tput bold) 
  3. #下劃線 
  4. underline=$(tput sgr 0 1) 
  5. #重置規(guī)則 
  6. reset=$(tput sgr0) 
  7. #紅色 
  8. red=$(tput setaf 1) 
  9. #綠色 
  10. green=$(tput setaf 2) 

下面是一個帶閃爍功能的時鐘

  1. #!/bin/bash 
  2.  
  3. for ((i=0;i<8;i++)) 
  4. do 
  5.         tput sc; tput civis                     # 記錄光標(biāo)位置,及隱藏光標(biāo) 
  6.         tput blink; tput setf $i                # 文本閃爍,更改文本顏色 
  7.         echo -ne $(date +'%Y-%m-%d %H:%M:%S')   # 顯示時間 
  8.         sleep 1 
  9.         tput rc                                 # 恢復(fù)光標(biāo)到記錄位置 
  10. done 
  11.  
  12. tput el; tput cnorm                             # 退出時清理終端,恢復(fù)光標(biāo)顯示 

效果

5. for循環(huán)

for循環(huán)的運作方式,是講串行的元素意義取出,依序放入指定的變量中,然后重復(fù)執(zhí)行含括的命令區(qū)域(在do和done 之間),直到所有元素取盡為止。

其中,串行是一些字符串的組合,彼此用$IFS所定義的分隔符(如空格符)隔開,這些字符串稱為字段。

for的語法結(jié)構(gòu)如下:

  1. 1. for 變量 in 串行 
  2. 2. do 
  3. 3.    執(zhí)行命令 
  4. 4. done 

說明:

行1,講串行中的字段迭代放入變量中 行2-4,接著將重復(fù)執(zhí)行do和done之間的命令區(qū)域,直到串行中每一個字段均處理過為止。

舉例 用for循環(huán)在家目錄下創(chuàng)建aaa1-aaa10,然后在aaa1-aaa10創(chuàng)建bbb1-bbb10的目錄

  1. 1. #!/bin/bash 
  2. 2. for k in $( seq 1 10 ) 
  3. 3. do 
  4. 4.    mkdir /home/peng/aaa${k} 
  5. 5.    cd /home/peng/aaa${k} 
  6. 6.    for l in $( seq 1 10 ) 
  7. 7.    do 
  8. 8.    mkdir bbb${l} 
  9. 9.    cd /home/peng/aaa${k} 
  10. 10.   done 
  11. 11.   cd .. 
  12. done 

列出var目錄下各子目錄占用磁盤空間的大小。

  1. #!/bin/bash 
  2. DIR="/var" 
  3. cd $DIR 
  4. for k in $(ls $DIR) 
  5. do 
  6.   [ -d $k ] && du -sh $k 
  7. done 

6. while循環(huán)

while循環(huán)的語法:

  1. 1. while 條件測試 
  2. 2. do 
  3. 3.   執(zhí)行命令 
  4. 4. done 

說明:

  1. 行1,首先進(jìn)行條件測試,如果傳回值為0(條件測試為真),則進(jìn)入循環(huán),執(zhí)行命令區(qū)域,否則 
  2. 不進(jìn)入循環(huán),介紹while 命令 
  3. 行3,執(zhí)行命令區(qū)域,這些命令中,應(yīng)該要有改變條件測試的命令,這樣,才有機(jī)會在 
  4. 有限步驟后結(jié)束執(zhí)行while循環(huán)(除非想要執(zhí)行無窮循環(huán))。 
  5. 行4,回到行1,執(zhí)行while命令 

流程圖:

實例 計算1+2+3…………10

  1. #!/bin/bash 
  2. declare -i i=1 
  3. declare -i sum=0 
  4. while ((i<=10)) 
  5. do 
  6.   let sum+=i 
  7.   let ++i 
  8. done 
  9. echo $sum 

二、圣誕樹腳本文件

  1. #!/bin/bash 
  2. #用shell編寫一個圣誕樹 
  3. #創(chuàng)建時間2021-12-23 
  4. trap "tput reset; tput cnorm; exit" 2 
  5. clear 
  6. tput civis 
  7. lin=2 
  8. col=$(($(tput cols) / 2)) 
  9. c=$((col-1)) 
  10. est=$((c-2)) 
  11. color=0 
  12. tput setaf 2; tput bold 
  13.  
  14. # 打印樹葉 
  15. for ((i=1; i<20; i+=2)) 
  16.     tput cup $lin $col 
  17.     for ((j=1; j<=i; j++)) 
  18.     { 
  19.         echo -n \* 
  20.     } 
  21.     let lin++ 
  22.     let col-- 
  23.  
  24. tput sgr0; tput setaf 3 
  25.  
  26. # 打印樹干 
  27. for ((i=1; i<=2; i++)) 
  28.     tput cup $((lin++)) $c 
  29.     echo '||' 
  30. new_year=$(date +'%Y'
  31. let new_year++ 
  32. tput setaf 222; tput bold 
  33. tput cup $lin $((c - 10));  echo $new_year  圣 誕 節(jié) 快 樂?。?! 
  34. color=122 
  35. tput setaf $color; tput bold 
  36. tput cup $((lin + 1)) $((c - 10)); echo 關(guān)注公眾號:  一口Linux! 
  37. let c++ 
  38. k=1 
  39.  
  40. #裝飾一下 
  41. while true; do 
  42.     for ((i=1; i<=35; i++)) { 
  43.         # Turn off the lights 
  44.         [ $k -gt 1 ] && { 
  45.             tput setaf 2; tput bold 
  46.             tput cup ${line[$[k-1]$i]} ${column[$[k-1]$i]}; echo \* 
  47.             unset line[$[k-1]$i]; unset column[$[k-1]$i]  
  48.         } 
  49.  
  50.         li=$((RANDOM % 9 + 3)) 
  51.         start=$((c-li+2)) 
  52.         co=$((RANDOM % (li-2) * 2 + 1 + start)) 
  53.         tput setaf $color; tput bold 
  54.         tput cup $li $co 
  55.         echo o 
  56.         line[$k$i]=$li 
  57.         column[$k$i]=$co 
  58.         color=$(((color+1)%8)) 
  59.         
  60.         sh=1 
  61.   #for l in M O N E Y 
  62.   for l in  一 口 Li nu x! 
  63.         do 
  64.             tput cup $((lin+1)) $((c+sh)) 
  65.             echo $l 
  66.             let sh++ 
  67.             let sh++ 
  68.             sleep 0.02 
  69.         done 
  70.     } 
  71.     k=$((k % 2 + 1)) 
  72. done 

三、執(zhí)行腳本

  1. root@ubuntu:/home/peng/work/test# chmod 777 peng.sh 
  2. root@ubuntu:/home/peng/work/test# ./peng.sh  

還等什么呢?抓緊運行起來吧!

本文轉(zhuǎn)載自微信公眾號「一口Linux」

 

責(zé)任編輯:姜華 來源: 一口Linux
相關(guān)推薦

2015-12-25 16:30:21

JavaScript代碼圣誕樹

2018-12-25 09:27:55

Python圣誕帽程序員

2017-12-22 17:12:54

圣誕節(jié)

2015-12-04 09:38:03

2011-12-20 14:49:21

投影儀推薦

2013-01-28 09:11:56

圣誕推廣移動應(yīng)用

2021-12-06 14:02:25

勒索軟件攻擊數(shù)據(jù)泄露

2020-12-24 13:20:17

機(jī)器人人工智能圣誕節(jié)

2009-02-19 08:49:11

Windows 7發(fā)布日期

2012-12-28 11:23:36

App Store圣誕節(jié)

2019-12-25 15:22:20

Python 開發(fā)編程語言

2009-12-25 17:10:54

2013-01-04 11:08:20

云瀏覽器遨游

2014-12-22 11:10:06

LG

2010-12-27 14:26:04

2011-12-28 10:23:30

Google

2011-12-29 09:15:36

Android之父安迪·魯賓Android設(shè)備

2021-12-31 11:35:40

藍(lán)牙漏洞玩具Fisher-Pric

2009-05-12 09:13:17

微軟SQLSQL Server

2013-12-30 10:04:10

點贊
收藏

51CTO技術(shù)棧公眾號