华南俳烁实业有限公司

考試首頁 | 考試用書 | 培訓課程 | 模擬考場 | 考試論壇  
  當前位置:操作系統(tǒng) > Unix > 文章內容
  

Unix系統(tǒng):FreeBSD為powerd設置cpu最小工作頻率

 [ 2017年7月5日 ] 【

  在Unix操作系統(tǒng)中,說實話其字符串的處理功能實在不強。如沒有現成的length(獲取字符串的長度)等函數。要實現對字符串的操作,往往需要采用 expr命令結合相關的通配符來實現一些特定的功能。雖然在Unix操作系統(tǒng)中,對于字符串的操作比較麻煩。但是系統(tǒng)工程師只要知道各種處理方式特點與缺點,那么對癥下藥,仍然可以找到一些簡單的方式來處理系統(tǒng)中的字符串問題。

  一、對用戶輸入的字符串長度進行驗證。

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

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

  二、截取字符串。

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

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

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

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

  三、修改文件的擴展名。

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

  如果要實現批量更改文件擴展名的話,則可以借助for等循環(huán)語句來實現。不過循環(huán)語句內部的操作有兩種實現方式。一是采用expr命令。其實對文件名進行操作,說到底就是對字符串的操作。因為文件名字也是一種字符串。如系統(tǒng)工程師可以先利用expr命令截取字符串的功能,將擴展名前面的字符串截取出來,然后將其保存在一個變量中,如filenameshort。然后再利用系統(tǒng)的重命名或者移動文件的命令,對系統(tǒng)進行重命名,如$filenameshortdoc。這就可以實現更改擴展名的需求。不過筆者并不建議采用這個expr命令來完成這個需求。因為當文件名的長度不固定時,這個正則表達式比價難寫。要將文件名字符串截取出來(去掉擴展名的名字),有一定的難度。

首頁 1 2 尾頁
本文糾錯】【告訴好友】【打印此文】【返回頂部
將考試網添加到收藏夾 | 每次上網自動訪問考試網 | 復制本頁地址,傳給QQ/MSN上的好友 | 申請鏈接 | 意見留言 TOP
關于本站  網站聲明  廣告服務  聯(lián)系方式  站內導航  考試論壇
Copyright © 2007-2013 中華考試網(Examw.com) All Rights Reserved
江川县| 霍邱县| 昭苏县| 金阳县| 嘉义县| 盘锦市| 焉耆| 休宁县| 上犹县| 阳新县| 天台县| 扶风县| 玉山县| 华安县| 双牌县| 凉城县| 莱西市| 博罗县| 辽中县| 昭通市| 合水县| 铁力市| 玉环县| 七台河市| 闵行区| 乌海市| 藁城市| 麻栗坡县| 西贡区| 东乌| 商南县| 达孜县| 顺昌县| 怀仁县| 蓝田县| 砀山县| 东乡| 绵阳市| 卢龙县| 桐乡市| 灵山县|