最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unix 操作系統(tǒng)中處理字符串問(wèn)題的簡(jiǎn)單方式

  發(fā)布時(shí)間:2009-06-12 22:21:26   作者:佚名   我要評(píng)論
在Unix操作系統(tǒng)中,說(shuō)實(shí)話其字符串的處理功能實(shí)在不強(qiáng)。如沒(méi)有現(xiàn)成的length(獲取字符串的長(zhǎng)度)等函數(shù)。要實(shí)現(xiàn)對(duì)字符串的操作,往往需要采用 expr命令結(jié)合相關(guān)的通配符來(lái)實(shí)現(xiàn)一些特定的功能。雖然在Unix操作系統(tǒng)中,對(duì)于字符串的操作比較麻煩。但是系統(tǒng)工程師只要知道各種處理
在Unix操作系統(tǒng)中,說(shuō)實(shí)話其字符串的處理功能實(shí)在不強(qiáng)。如沒(méi)有現(xiàn)成的length(獲取字符串的長(zhǎng)度)等函數(shù)。要實(shí)現(xiàn)對(duì)字符串的操作,往往需要采用 expr命令結(jié)合相關(guān)的通配符來(lái)實(shí)現(xiàn)一些特定的功能。雖然在Unix操作系統(tǒng)中,對(duì)于字符串的操作比較麻煩。但是系統(tǒng)工程師只要知道各種處理方式特點(diǎn)與缺點(diǎn),那么對(duì)癥下藥,仍然可以找到一些簡(jiǎn)單的方式來(lái)處理系統(tǒng)中的字符串問(wèn)題。

  一、對(duì)用戶輸入的字符串長(zhǎng)度進(jìn)行驗(yàn)證。

  系統(tǒng)工程師有時(shí)候往往需要對(duì)用戶輸入的字符串長(zhǎng)度進(jìn)行驗(yàn)證。如在設(shè)計(jì)一個(gè)登陸程序時(shí),為了安全起見(jiàn),可能需要限制用戶密碼輸入的最小位數(shù),如必須是六位以上的密碼等等。此時(shí),其實(shí)就是統(tǒng)計(jì)用戶輸入的字符串長(zhǎng)度問(wèn)題。如果用戶輸入的密碼長(zhǎng)度不夠,就提醒用戶;如果夠的話,就直接保存用戶輸入的信息。所以,簡(jiǎn)單的說(shuō)這可以利用if語(yǔ)句或者while循環(huán)判斷語(yǔ)句來(lái)實(shí)現(xiàn)。而這個(gè)條件則可以利用expr關(guān)鍵字來(lái)實(shí)現(xiàn)。

  如果用判斷用戶輸入的字符串長(zhǎng)度,可以利用如下的格式來(lái)寫(xiě)。Expr “$userpasswd” : ’.*’ 即可。在編寫(xiě)這個(gè)命令時(shí),需要注意一些基本的規(guī)則。如這個(gè)expr命令往往需要使用兩個(gè)表達(dá)式,而且中間需要使用英文狀態(tài)小的冒號(hào)進(jìn)行分割。而且這個(gè)兩個(gè)表達(dá)式的順序也有嚴(yán)格的限制。冒號(hào)左邊是需要處理的字符串(需要統(tǒng)計(jì)長(zhǎng)度的字符串或者變量),而冒號(hào)右邊則是普通的正則表達(dá)式。其次,需要處理的字符串需要使用雙引號(hào)括起來(lái)。這里跟普通命令中字符串的處理方式有所不同。在普通的命令中,變量不需要使用雙引號(hào)因起來(lái)。如果引起起來(lái)的話,則系統(tǒng)反而會(huì)將其當(dāng)作常量來(lái)處理。但是如果在if條件語(yǔ)句中將利用這個(gè)命令來(lái)統(tǒng)計(jì)字符串長(zhǎng)度時(shí),則需要將變量使用雙引號(hào)引起來(lái)。這個(gè)字符串處理上的差異需要注意,不少系統(tǒng)工程師在這里吃過(guò)虧。第三,有時(shí)候正則表達(dá)式也需要利用單引號(hào)來(lái)引起來(lái)。如上面的’.*’則表示所有匹配的字符。如果不使用單引號(hào)的話,系統(tǒng)可能會(huì)提示語(yǔ)法錯(cuò)誤。

  二、截取字符串。

  有時(shí)候系統(tǒng)管理員需要截取字符串的自串來(lái)完成特定的任務(wù)。如現(xiàn)在系統(tǒng)工程師需要對(duì)某個(gè)文件根據(jù)系統(tǒng)的時(shí)間來(lái)進(jìn)行命名,其命名的規(guī)則為年份(最后兩位)加月份的形式,即0906表示這個(gè)文件是09年6月份創(chuàng)建的。因?yàn)槊總€(gè)月創(chuàng)建一個(gè)獨(dú)立的日志文件,為此按這個(gè)格式對(duì)其進(jìn)行命名算是比較合理的。但是在系統(tǒng)中實(shí)現(xiàn)起來(lái)有一定的困難。然后通過(guò)date命令加上一些可選項(xiàng)參數(shù)可以截取日期的年份、月份等信息??墒抢胐ate命令截取的年份是四位數(shù)字(如 2009),而不是兩位數(shù)字。這跟系統(tǒng)工程師的需求還有一定的距離。那么如果一定要采用年份的兩位數(shù)字來(lái)對(duì)文件或者文件夾進(jìn)行命名,該如何處理呢?

  此時(shí)就需要用到expr命令的另一個(gè)功能,即截取字符串的功能。一般來(lái)說(shuō),expr命令主要有三個(gè)功能,分別為求字符串的長(zhǎng)度、截取字符子串、求一個(gè)字符在一個(gè)字符串中的位置。當(dāng)然如果這些功能跟其他命令結(jié)合使用的話,可以實(shí)現(xiàn)一些比較復(fù)雜的需求。在Unix系統(tǒng)中,如果需要截取字符串的話,筆者首先建議的是采用一些自帶的命令。如date %w則表示顯示今天星期幾。雖然expr命令也可以實(shí)現(xiàn)類(lèi)似的功能,但是初期起來(lái)比較麻煩。為此對(duì)于截取字符串筆者建議,能夠使用系統(tǒng)自帶功能來(lái)實(shí)現(xiàn)的,那么就使用系統(tǒng)自帶的命令。如果沒(méi)有的話,那么就只有用過(guò)expr命令來(lái)實(shí)現(xiàn)。也就是說(shuō),expr 是一個(gè)通用的命令,所有的字符串截取工作其都可以完成。只是代碼書(shū)寫(xiě)起來(lái)沒(méi)有那些系統(tǒng)自帶命令那么簡(jiǎn)單。如果現(xiàn)在系統(tǒng)工程師需要截取年份的后兩位數(shù)字,此時(shí)該如何處理呢?在系統(tǒng)轉(zhuǎn)義字符的幫助下,可以完成這個(gè)功能。如下所示:

  $expr “2009” : ‘..\(..\)’

  在實(shí)現(xiàn)這個(gè)功能的時(shí)候,筆者使用了\這個(gè)轉(zhuǎn)義字符。這個(gè)正則表達(dá)式的含義就表示只考慮前面這個(gè)字符串的最后兩個(gè)字符,而忽略其他的字符。若需要利用上面這個(gè)規(guī)則來(lái)進(jìn)行文件命令的話,只需要先利用這個(gè)命令截取年份的最后兩位,然后再把月份加上去即可。上面的字符串2009系統(tǒng)工程師也可以使用變量來(lái)代替。系統(tǒng)工程師需要注意的是這個(gè)正則表達(dá)式的書(shū)寫(xiě)方法。在使用expr命令來(lái)對(duì)字符串進(jìn)行處理,其難點(diǎn)就在于這個(gè)正則表達(dá)式的書(shū)寫(xiě)。通常情況下,只要合理編寫(xiě)這個(gè)正則表達(dá)式,則其字符串的處理功能,并不會(huì)比數(shù)據(jù)庫(kù)系統(tǒng)中字符串處理函數(shù)來(lái)的差,甚至有過(guò)之而不及?,F(xiàn)在的主要問(wèn)題是,由于經(jīng)驗(yàn)有限,系統(tǒng)工程師往往很難根據(jù)用戶需求來(lái)定義這個(gè)正則表達(dá)式。就連筆者有時(shí)候也會(huì)在這里卡住。如果系統(tǒng)工程師想要提高自己正則表達(dá)式的書(shū)寫(xiě)能力,那么多看看其他系統(tǒng)工程師書(shū)寫(xiě)的腳本,往往能夠在最短時(shí)間內(nèi)提高自己正則表達(dá)式的書(shū)寫(xiě)水平。

  三、修改文件的擴(kuò)展名。

  如現(xiàn)在操作系統(tǒng)中某個(gè)目錄下面有很多的sh文件(Unix系統(tǒng)中的配置文件,其實(shí)跟txt相同)。現(xiàn)在系統(tǒng)工程師需要將這些sh文件的擴(kuò)展名改掉,全部改為txt。雖然可以通過(guò)一個(gè)個(gè)的手工修改來(lái)實(shí)現(xiàn),但是處理起來(lái)的難度比較大。

  如果要實(shí)現(xiàn)批量更改文件擴(kuò)展名的話,則可以借助for等循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)。不過(guò)循環(huán)語(yǔ)句內(nèi)部的操作有兩種實(shí)現(xiàn)方式。一是采用expr命令。其實(shí)對(duì)文件名進(jìn)行操作,說(shuō)到底就是對(duì)字符串的操作。因?yàn)槲募忠彩且环N字符串。如系統(tǒng)工程師可以先利用expr命令截取字符串的功能,將擴(kuò)展名前面的字符串截取出來(lái),然后將其保存在一個(gè)變量中,如filenameshort。然后再利用系統(tǒng)的重命名或者移動(dòng)文件的命令,對(duì)系統(tǒng)進(jìn)行重命名,如$filenameshortdoc。這就可以實(shí)現(xiàn)更改擴(kuò)展名的需求。不過(guò)筆者并不建議采用這個(gè)expr命令來(lái)完成這個(gè)需求。因?yàn)楫?dāng)文件名的長(zhǎng)度不固定時(shí),這個(gè)正則表達(dá)式比價(jià)難寫(xiě)。要將文件名字符串截取出來(lái)(去掉擴(kuò)展名的名字),有一定的難度。

  在這里,筆者介紹另外一個(gè)命令basename命令。其實(shí)這也是一個(gè)字符串相關(guān)的處理命令。其基本格式為basename text1 text2。他的基本功能就是從第一個(gè)字符串中去掉第二個(gè)字符串的內(nèi)容。如執(zhí)行命令basename setup.sh sh,則就表示將setup.sh這個(gè)字符串中的sh字符串去掉,變?yōu)閟etup.。那么此就可以利用這個(gè)命令來(lái)進(jìn)行成批修改擴(kuò)展名。其具體的實(shí)現(xiàn)方式跟上面類(lèi)似。只是在截取文件名字符串的時(shí)候,采用了basename命令,而不是expr命令。而basename命令本身就帶有截取字符串的功能,不需要采用正則表達(dá)式。所以實(shí)現(xiàn)起來(lái)相對(duì)簡(jiǎn)單一點(diǎn)。

  從這個(gè)案例中,筆者也想再次強(qiáng)調(diào)一下一個(gè)字符串處理的基本原則。即無(wú)論是截取字符串還是對(duì)字符串進(jìn)行的其他操作,如果可以通過(guò)系統(tǒng)命令+可選項(xiàng)參數(shù)來(lái)實(shí)現(xiàn)的,就采用這種實(shí)現(xiàn)方式。如果沒(méi)有的話,需要考慮能否采用basename等不需要正則表達(dá)式的命令來(lái)實(shí)現(xiàn)。只有在以上兩種方式都不可行的情況下,才考慮使用exper命令來(lái)實(shí)現(xiàn)。這主要是因?yàn)檎齽t表達(dá)式的設(shè)計(jì)實(shí)在比較麻煩,雖然其功能比較強(qiáng)大。利用exper來(lái)統(tǒng)計(jì)一下字符串的長(zhǎng)度還好,但是如果要實(shí)現(xiàn)一些復(fù)雜功能,如截取字符串或者確定字符的位置,就需要系統(tǒng)工程師有比較深厚的功底了。

相關(guān)文章

  • Unix,BSD,Linux系統(tǒng)三者的區(qū)別小結(jié)

    這篇文章主要介紹了Unix,BSD,Linux系統(tǒng)三者的區(qū)別小結(jié),需要的朋友可以參考下
    2023-05-03
  • FreeBSD如何添加硬盤(pán)?FreeBSD添加硬盤(pán)的方法

    一些朋友問(wèn)小編FreeBSD如何添加硬盤(pán)?別擔(dān)心,今天小編就為大家分享FreeBSD添加硬盤(pán)的方法,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧
    2017-04-06
  • Freebsd PF 安裝使用詳解

    今天小編為大家?guī)?lái)的是Freebsd PF 安裝使用詳解,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧
    2017-04-06
  • FreeBSD下zfs: failed with error 6錯(cuò)誤如何解決?

    最近一些朋友問(wèn)小編 FreeBSD下zfs: failed with error 6錯(cuò)誤如何解決?今天小編要為大家?guī)?lái)的是 FreeBSD下zfs: failed with error 6錯(cuò)誤的解決方法,有需要的朋友一起去看
    2017-04-06
  • Unix文件系統(tǒng)和pwd命令實(shí)現(xiàn)詳解

    今天小編要為大家?guī)?lái)的是Unix文件系統(tǒng)和pwd命令實(shí)現(xiàn)詳解,希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧
    2017-04-01
  • Unix中的dot命令詳解

    今天小編將為大家?guī)?lái)的是Unix中的dot命令詳解!希望對(duì)大家會(huì)有幫助!有需要的朋友一起去看看吧
    2017-03-22
  • freebsd時(shí)間設(shè)置小節(jié)詳解

    近日!一些朋友對(duì)于freebsd時(shí)間設(shè)置小節(jié)存在疑慮!下面小編將為大家?guī)?lái)的是freebsd時(shí)間設(shè)置小節(jié)詳解!希望對(duì)大家會(huì)有幫助!有需要的朋友一起去看看吧
    2017-03-19
  • grub2引導(dǎo)freebsd詳解

    今天小編要為大家?guī)?lái)的是grub2引導(dǎo)freebsd詳解!希望對(duì)大家會(huì)有幫助,有需要的朋友一起去看看吧
    2017-03-19
  • FreeBSD10安裝內(nèi)核源代碼方法講解

    下面小編為大家?guī)?lái)的是FreeBSD10安裝內(nèi)核源代碼方法講解!希望能夠幫助到大家!有需要的朋友一起去看看吧
    2017-03-19
  • FreeBSD下如何使GraphicsMagick支持中文字體?

    最近一些朋友在問(wèn)FreeBSD下如何使GraphicsMagick支持中文字體?今天小編為大家?guī)?lái)的是FreeBSD下使GraphicsMagick支持中文字體的方法!有需要的朋友一起去看看吧
    2017-03-15

最新評(píng)論

桐庐县| 吐鲁番市| 乐山市| 安远县| 元阳县| 青浦区| 蓝山县| 潮安县| 万安县| 巴青县| 施甸县| 闻喜县| 临安市| 璧山县| 保靖县| 黔西县| 临洮县| 宁南县| 兴化市| 丹寨县| 手机| 安康市| 漳州市| 石柱| 沅陵县| 长沙市| 尉犁县| 乌兰察布市| 尉氏县| 丽江市| 湖南省| 诸暨市| 武陟县| 四会市| 望谟县| 兰考县| 天台县| 明星| 忻城县| 蒲城县| 仁布县|