欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

shell腳本中case條件控制語句的一個bug分析

 更新時間:2013年11月07日 17:38:26   作者:  
在shell腳本中,發(fā)現case語句的一個問題。就是指定小寫字母[a-z]和大寫字母[A-Z]的這種方法不管用了

在shell腳本中,發(fā)現case語句的一個問題。
就是指定小寫字母[a-z]和大寫字母[A-Z]的這種方法不管用了。

出現如下情況:

復制代碼 代碼如下:

[root@station1 ~]# cat case.sh
#!/bin/bash
while :
do
echo -n "input a letter: "
read var
case "$var" in
  [a-z]) echo "Lowercase letter";;
  [A-Z]) echo "Uppercase letter";;
 [0-9]) echo "Digit";;
  *) echo "Punctuation, whitespace, or other";;
esac
done
[root@station1 ~]# bash case.sh
input a letter: a
Lowercase letter
input a letter: A
Lowercase letter
input a letter: 2
Digit
input a letter: 0
Digit
input a letter: B
Lowercase letter
input a letter: y
Lowercase letter
input a letter: ^C
[root@station1 ~]#

可以看到當輸入大小寫字母都會輸出“Lowercase letter”

就當我疑惑不解的時候,奇跡發(fā)生了。。。。

復制代碼 代碼如下:

[root@station1 ~]# bash case.sh
input a letter: Z
Uppercase letter
input a letter:

當輸入大寫Z的時候,終于出現了我們想要的結果:Uppercase letter
后來在man bash文檔中也沒有關于"-"代表范圍的說明,值說想匹配"-",就把"-"放到[]中最前面或者最后面。
case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
A case command first expands word, and tries to match it against each pattern in turn, using the same matching rules as for pathname
expansion (see Pathname Expansion below). The word is expanded using tilde expansion, parameter and variable expansion, arithmetic sub-
stitution, command substitution, process substitution and quote removal. Each pattern examined is expanded using tilde expansion, param-
eter and variable expansion, arithmetic substitution, command substitution, and process substitution. If the shell option nocasematch is
enabled, the match is performed without regard to the case of alphabetic characters. When a match is found, the corresponding list is
executed. If the ;; operator is used, no subsequent matches are attempted after the first pattern match. Using ;& in place of ;; causes
execution to continue with the list associated with the next set of patterns. Using ;;& in place of ;; causes the shell to test the next
pattern list in the statement, if any, and execute any associated list on a successful match. The exit status is zero if no pattern
matches. Otherwise, it is the exit status of the last command executed in list.

再看下面這段代碼:

復制代碼 代碼如下:

[root@station1 ~]# cat case.sh
#!/bin/bash
while :
do
echo -n "input a letter: "
read var
case "$var" in
[a-c]) echo "Lowercase letter";;
[A-Z]) echo "Uppercase letter";;
[0-9]) echo "Digit";;
*) echo "Punctuation, whitespace, or other";;
esac
done
[root@station1 ~]# bash case.sh
input a letter: a
Lowercase letter
input a letter: b
Lowercase letter
input a letter: c
Lowercase letter
input a letter: d
Uppercase letter
input a letter: e
Uppercase letter
input a letter: ^C
[root@station1 ~]#

可以看出來它的編碼方式是:aAbBcCdDeE...yYzZ
所以才會出現這種情況。這也算是一個小bug吧,如果想真的想達到我們想要的結果,可以用posix的[:upper:]。
個人想法:有時候出現這種情況也不是個壞事,或許還可以利用這個bug去做點事。

相關文章

  • shell編程基礎之認識與學習BASH

    shell編程基礎之認識與學習BASH

    本文介紹下,shell基礎編程中有關bash的相關知識,有需要的朋友參考學習下
    2013-11-11
  • Shell腳本解壓rpm軟件包

    Shell腳本解壓rpm軟件包

    這篇文章主要介紹了Shell腳本解壓rpm軟件包,用來解壓后提取某個包中文件,需要的朋友可以參考下
    2014-06-06
  • shell一鍵部署Zabbix的實現步驟

    shell一鍵部署Zabbix的實現步驟

    本文主要介紹了shell一鍵部署Zabbix的實現步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • linux?top命令基本實戰(zhàn)

    linux?top命令基本實戰(zhàn)

    top命令的功能是用于實時顯示系統(tǒng)運行狀態(tài),包含處理器、內存、服務、進程等重要資源信息,這篇文章主要介紹了linux?top命令?實戰(zhàn),需要的朋友可以參考下
    2023-02-02
  • shell腳本中取消重定向的方法實例

    shell腳本中取消重定向的方法實例

    這篇文章主要介紹了shell腳本中取消重定向的方法實例,本文直接給出代碼實例,需要的朋友可以參考下
    2015-03-03
  • crontab每10秒執(zhí)行一次的實現方法

    crontab每10秒執(zhí)行一次的實現方法

    下面小編就為大家?guī)硪黄猚rontab每10秒執(zhí)行一次的實現方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Linux Shell函數返回值

    Linux Shell函數返回值

    這篇文章主要介紹了Linux Shell函數返回值,需要的朋友可以參考下
    2016-11-11
  • 一個簡單的linux命令 pwd

    一個簡單的linux命令 pwd

    這篇文章主要介紹了一個簡單的linux命令pwd,pwd命令用于查看當前工作目錄的完整路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Linux常用命令與命令縮寫整理

    Linux常用命令與命令縮寫整理

    這篇文章介紹了Linux的常用命令與命令縮寫,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Shell腳本獲取進程的運行時間

    Shell腳本獲取進程的運行時間

    這篇文章主要介紹了Shell腳本獲取進程的運行時間,需要的朋友可以參考下
    2014-06-06

最新評論