星期二, 三月 24, 2009

zz BASH中的字符串处理

到长度
 
%x="abcd"
#方法一
%expr length $x
4
# 方法二
%echo ${#x}
4
# 方法三
%expr "$x" : ".*"
4
# expr 的帮助
# STRING : REGEXP   anchored pattern match of REGEXP in STRING
查找子串
 
%expr index  $x "b"
2
%expr index  $x "a"
1
%expr index  $x "b"
2
%expr index  $x "c"
3
%expr index  $x "d"
4
得到子字符串
 
# 方法一
# expr startpos length
%expr substr "$x" 1 3
abc
%expr substr "$x" 1 5
abcd
%expr substr "$x" 2 5
bcd
# 方法二
# ${x:pos:lenght}
%echo ${x:1}
bcd
%echo ${x:2}
cd
%echo ${x:0}
abcd
%echo ${x:0:2}
ab
%pos=1
%len=2
%echo ${x:$pos:$len}
bc
匹配正则表达式
 
# 打印匹配长度
%expr match $x "."
1
%expr match $x "abc"
3
%expr match $x "bc"
0
字符串的掐头去尾
 
%x=aabbaarealwwvvww
%echo "${x%w*w}"
aabbaarealwwvv
%echo "${x%%w*w}"
aabbaareal
%echo "${x##a*a}"
lwwvvww
%echo "${x#a*a}"
bbaarealwwvvww
其中 , # 表示掐头, 因为键盘上 # 在 $ 的左面。
其中 , % 表示%,  因为键盘上 % 在 $ 的右面。
单个的表示最小匹配,双个表示最大匹配。
也就是说,当匹配的有多种方案的时候,选择匹配的最大长度还是最小长度。

字符串的替换
 
%x=abcdabcd
%echo ${x/a/b} # 只替换一个
bbcdabcd
%echo ${x//a/b} # 替换所有
bbcdbbcd
不可以使用 regexp , 只能用 * ? 的文件扩展方式。

星期一, 三月 23, 2009

zz Unix Shell中引号的用法

shell可以识别4种不同类型的引字符号: 单引号字符' 双引号字符" 反斜杠字符\ 反引号字符`

1. 单引号 ( ' ' )


howard@0[script]$ grep Susan phonebook
Susan Goldberg 403-212-4921
Susan Topple    212-234-2343
如果我们想查找的是Susan Goldberg,不能直接使用grep Susan Goldberg phonebook命令,grep会把Goldberg和phonebook当作需要搜索的文件
howard@0[script]$ grep 'Susan Gold' phonebook
Susan Goldberg 403-212-4921
当shell碰到第一个单引号时,它忽略掉其后直到右引号的所有特殊字符

2. 双引号 ( " " )


双引号作用与单引号类似,区别在于它没有那么严格。单引号告诉shell忽略所有特殊字符,而双引号只要求忽略大多数,具体说,括在双引号中的三种特殊字符不被忽略:$,\,` ,即双引号会解释字符串的特别意思,而单引号直接使用字符串.
如果使用双引号将字符串赋给变量并反馈它,实际上与直接反馈变量并无差别。如果要查询包含空格的字符串,经常会用到双引号。
howard@0[script]$ x=*
howard@0[script]$ echo $x
hello.sh menus.sh misc.sh phonebook tshift.sh
howard@0[script]$ echo '$x'
$x
howard@0[script]$ echo "$x"
*
这个例子可以看出无引号、单引号和双引号之间的区别。在最后一种情况中,双引号告诉shell在引号内照样进行变量名替换,所以shell把$x替换为*,因为双引号中不做文件名替换,所以就把*作为要显示的值传递给echo。

对于第一种情况需要进一步说明,shell在给变量赋值时不进行文件名替换(这从第三种情况中也能看出来),各步骤发生的精确次序如下:
shell扫描命令行,把x的值设为星号*;
shell再次扫描命令行,碰到星号*,把它替换成当前目录下的文件清单;
shell启动执行echo命令,把文件清单作为参数传递给echo.
这个赋值的先后次序非常重要:shell先作变量替换,然后作文件名替换,最后把这行处理为参数

3. 反引号(``)


命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。shell中有两种方法作命令替换:把shell命令用反引号或者$(...)结构括起来,其中,$(...)格式受到POSIX标准支持,也利于嵌套。
howard@0[script]$ echo The date and time is `date`
The date and time is 三 6月 15 06:10:35 CST 2005
howard@0[script]$ echo Your current working directory is $(pwd)
Your current working directory is /home/howard/script.

4. 反斜杠 backslash-escaped( \ )


反斜杠一般用作转义字符,或称逃脱字符,linux如果echo要让转义字符发生作用,就要使用-e选项

星期日, 三月 22, 2009

LS用法

LS

Section: User Commands (1)
Updated: November 1998

 

NAME

ls, dir, vdir - 列目錄內容  

提要

ls [選項] [文件名...]

POSIX 標準選項: [-CFRacdilqrtu1]  

GNU 選項 (短格式):

[-1abcdfgiklmnopqrstuxABCDFGLNQRSUX] [-w cols] [-T cols] [-I pattern] [--full-time][--format={long,verbose,commas,across,vertical,single-column}] [--sort={none,time,size,extension}] [--time={atime,access,use,ctime,status}] [--color[={none,auto,always}]] [--help] [--version] [--]  

描述( DESCRIPTION )


程序ls先列出非目錄的文件項,然是每一個目錄中的 
“可顯示”文件。如果沒有選項之外的參數【譯注:即 
文件名部分為空】出現,缺省為 "." (當前目錄)。選 
項“ -d ”使得目錄與非目錄項同樣對待。除非“ -a ” 
選項出現,文件名以“.”開始的文件不屬“可顯示”文 
件。 
以當前目錄為準,每一組文件(包括非目錄文件項,以及 
每一內含文件的目錄)分別按文件名比較順序排序。如果 
“ -l ”選項存在,每組文件前顯示一摘要行給出該 
組文件長度之和(以 512 字節為單位)。 
輸出是到標準輸出( stdout )。除非以“ -C ”選項要 
求按多列輸出,輸出將是一行一個。然而,輸出到終端時, 
單列輸出或多列輸出是不確定的。可以分別用選項“ -1 ” 
或“ -C ”來強制按單列或多列輸出。

-C
多列輸出,縱向排序。
-F
每個目錄名加“ / ”綴,每個 FIFO 名加“ | ”綴, 每個可運行名加“ * ”綴。
-R
遞歸列出遇到的子目錄。
-a
列出所有文件,包括以 "." 開頭的隱含文件。
-c
使用“狀態改變時間”代替“文件修改時間”為依據來排序 (使用“ -t ”選項時)或列出(使用“ -l ”選項時)。
-d
將目錄名象其它文件一樣列出,而不是列出它們的內容。
-i
輸出文件前先輸出文件系列號(即 i 節點號 i-node number)。 -l 列出(以單列格式)文件模式( file mode ),文件的鏈 接數,所有者名,組名,文件大小(以字節為單位),時間信 息,及文件名。缺省時,時間信息顯示最近修改時間;可以以 選項“ -c ”和“ -u ”選擇顯示其它兩種時間信息。對設 備文件,原先顯示文件大小的區域通常顯示的是主要和次要的 號(majorand minor device numbers)。
-q
將文件名中的非打印字符輸出為問號。(對到終端的輸出這是缺省的。)
-r
逆序排列。
-t
按時間信息排序。
-u
使用最近訪問時間代替最近修改時間為依據來排序(使用 “ -t ”選項時)或列出(使用“ -l ”選項時)。
-1 單列輸出。
 

GNU 細節

如果標準輸出是終端,將多列輸出(縱向排序)。
dir ( 也被安裝為命令 d ) 等同“ ls -C ”;即,文件
缺省是多列輸出,縱向排序。vdir ( 也被安裝為命令 v ) 等同“ ls -l ”; 即,文件缺省是按長格式輸出。
 

GNU 選項

-1, --format=single-column 一行輸出一個文件(單列輸出)。如標準輸出不是到終端, 此選項就是缺省選項。
-a, --all
列出目錄中所有文件,包括以“.”開頭的文件。
-b, --escape
把文件名中不可輸出的字符用反斜槓加字符編號(就象在 C 語言裡一樣)的形式列出。
-c, --time=ctime, --time=status
按文件狀態改變時間(i節點中的ctime)排序並輸出目錄內 容。如採用長格式輸出(選項“-l”),使用文件的狀態改 變時間取代文件修改時間。【譯注:所謂文件狀態改變(i節 點中以ctime標志),既包括文件被修改,又包括文件屬性( 如所有者、組、鏈接數等等)的變化】
-d, --directory
將目錄名象其它文件一樣列出,而不是列出它們的內容。
-f
不排序目錄內容;按它們在磁盤上存儲的順序列出。同時啟 動“ -a ”選項,如果在“ -f ”之前存在“ -l ”、“ - -color ”或“ -s ”,則禁止它們。
-g 忽略,為兼容UNIX用。
-i, --inode
在每個文件左邊打印 i 節點號(也叫文件序列號和索引號 file serial number and index number)。i節點號在每 個特定的文件系統中是唯一的。
-k, --kilobytes
如列出文件大小,則以千字節KB為單位。
-l, --format=long, --format=verbose
除每個文件名外,增加顯示文件類型、權限、硬鏈接數、所 有者名、組名、大小( byte )、及時間信息(如未指明是 其它時間即指修改時間)。對6個月以上的文件或超出未來 1 小時的文件,時間信息中的時分將被年代取代。 每個目錄列出前,有一行“總塊數”顯示目錄下全部文件所 佔的磁盤空間。塊默認是 1024 字節;如果設置了 POSIXLY_CORRECT 的環境變量,除非用“ -k ”選項,則默認塊大小是 512 字 節。每一個硬鏈接都計入總塊數(因此可能重復計數),這無 疑是個缺點。
列出的權限類似以符號表示(文件)模式的規范。但是 ls
在每套權限的第三個字符中結合了多位( multiple bits ) 的信息,如下: s 如果設置了 setuid 位或 setgid 位,而且也設置了相應的可執行位。 S 如果設置了 setuid 位或 setgid 位,但是沒有設置相應的可執行位。 t 如果設置了 sticky 位,而且也設置了相應的可執行位。 T 如果設置了 sticky 位,但是沒有設置相應的可執行位。 x 如果僅僅設置了可執行位而非以上四種情況。 - 其它情況(即可執行位未設置)。
-m, --format=commas
水平列出文件,每行盡可能多,相互用逗號和一個空格分隔。
-n, --numeric-uid-gid
列出數字化的 UID 和 GID 而不是用戶名和組名。
-o
以長格式列出目錄內容,但是不顯示組信息。等使用“ --format=long --no-group ”選項。提供此選項是為了與其它版本的 ls 兼容。
-p
在每個文件名附上一個字符以說明該文件的類型。類似“ -F ”選項但是不 標示可執行文件。
-q, --hide-control-chars
用問號代替文件名中非打印的字符。這是缺省選項。
-r, --reverse
逆序排列目錄內容。
-s, --size
在每個文件名左側輸出該文件的大小,以 1024 字節的塊為單位。如果設置了 POSIXLY_CORRECT 的環境變量,除非用“ -k ”選項,塊大小是 512 字節。
-t, --sort=time
按文件最近修改時間( i 節點中的 mtime )而不是按文件名字典序排序,新文件 靠前。
-u, --time=atime, --time=access, --time=use
類似選項“ -t ”,但是用文件最近訪問時間( i 節點中的 atime )取代文件修 改時間。如果使用長格式列出,打印的時間是最近訪問時間。
-w, --width cols
假定屏幕寬度是 cols ( cols 以實際數字取代)列。如未用此選項,缺省值是這 樣獲得的:如可能先嘗試取自終端驅動,否則嘗試取自環境變量 COLUMNS (如果設 置了的話),都不行則取 80 。
-x, --format=across, --format=horizontal
多列輸出,橫向排序。
-A, --almost-all
顯示除 "." 和 ".." 外的所有文件。
-B, --ignore-backups
不輸出以“ ~ ”結尾的備份文件,除非已經在命令行中給出。
-C, --format=vertical
多列輸出,縱向排序。當標準輸出是終端時這是缺省項。使用命令名 dir 和 d 時, 則總是缺省的。
-D, --dired
當採用長格式(“ -l ”選項)輸出時,在主要輸出,額外打印一行: //DIRED// BEG1 END1 BEG2 END2 ...
BEGn 和 ENDn 是無符號整數,記錄每個文件名的起始、結束位置在輸出中的位置(
字節偏移量)。這使得 Emacs 易找到文件名,即使文件名包含空格或換行等非正 常字符也無需特異的搜索。
如果目錄是遞歸列出的(“ -R ”選項),每個子目錄列出類似一行:
//SUBDIRED// BEG1 END1 ... 【譯注:我測試了 TurboLinux4.0 和 RedHat6.1 ,發現它們都是在 “ //DIRED// BEG1... ”之列出“ //SUBDIRED// BEG1 ... ”,也即只有一個 而不是在每個子目錄都有。而且“ //SUBDIRED// BEG1 ... ”列出的是各個子目 錄名的偏移。】
-F, --classify, --file-type
在每個文件名附上一個字符以說明該文件的類型。“ * ”表示普通的可執行文件; “ / ”表示目錄;“ @ ”表示符號鏈接;“ | ”表示FIFOs;“ = ”表示套接字 (sockets) ;什也沒有則表示普通文件。
-G, --no-group
以長格式列目錄時不顯示組信息。
-I, --ignorepattern
除非在命令行中給定,不要列出匹配 shell 文件名匹配式( pattern ,不是指一般 表達式)的文件。在 shell 中,文件名以 "." 起始的不與在文件名匹配式 (pattern) 開頭的通配符匹配。
-L, --dereference
列出符號鏈接指向的文件的信息,而不是符號鏈接本身。
-N, --literal
不要用引號引起文件名。
-Q, --quote-name
用雙引號引起文件名,非打印字符以 C 語言的方法表示。
-R, --recursive
遞歸列出全部目錄的內容。
-S, --sort=size
按文件大小而不是字典序排序目錄內容,大文件靠前。
-T, --tabsize cols
假定每個制表符寬度是 cols 。缺省為 8。為求效率, ls 可能在輸出中使用制表符。 若 cols 為 0,則不使用制表符。
-U, --sort=none
不排序目錄內容;按它們在磁盤上存儲的順序列出。(選項“ -U ”和“ -f ”的不 同是前者不啟動或禁止相關的選項。)這在列很大的目錄時特別有用,因為不加排序 能顯的加快速度。
-X, --sort=extension
按文件擴展名(由最的 "." 之的字符組成)的字典序排序。沒有擴展名的先列 出。
--color[=when]
指定是否使用顏色區別文件類別。環境變量 LS_COLORS 指定使用的顏色。如何設置 這個變量見 dircolors(1) 。 when 可以被省略,或是以下幾項之一:
none 不使用顏色,這是缺省項。
auto 僅當標準輸出是終端時使用。 always 總是使用顏色。指定 --color 而且省略 when 時就等同 --color=always 。
--full-time
列出完整的時間,而不是使用標準的縮寫。格式如同 date(1) 的缺省格式;此格式 是不能改變的,但是你可以用 cut(1) 取出其中的日期字串並將結果送至命令 “ date -d ”。
輸出的時間包括秒是非常有用的。( Unix 文件系統儲存文件的時間信息精確到秒,
因此這個選項已經給出了系統所知的全部信息。)例如,當你有一個 Makefile 文件 不能恰當的生成文件時,這個選項會提供幫助。
 

GNU 標準選項

--help
打印用法信息到標準輸出並順利退出。
--version
打印版本信息到標準輸出並順利退出。
--
結束選項表。
 

環境

變量 POSIXLY_CORRECT 可以決定一組選擇。如果沒有設置此變量,每個制表符的字 符數由變量 TABSIZE 決定。變量 COLUMNS (當它由一個十進制整數表示時)決定輸 出的列寬度(同“ -C ”選項一起用時)。文件名不得為適應多列輸出而被截斷。變 量 LANG, LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES 及 LC_TIME 仍保持原義。 變量 TZ 給出時區供 ls 輸出相應的時間字串。變量 LS_COLORS 用以決定是否使用 顏色。  

已知錯誤

在 BSD 系統上,對從 HP-UX 系統上通過 NFS mount 而來的文件,“ -s ”選項報 告的大小只有正確值的一半;在 HP-UX 系統上,對從 BSD 系統上通過 NFS mount 而來的文件, ls 報告的大小則有正確值的兩倍。這是 HP-UX 的一個缺陷造成的,它 也影響 HP-UX 上的 ls 程序。  

適合到

POSIX 1003.2  

參見

dircolors(1)  

注意

本頁描述的是 fileutils-3.16 文件包中的 ls ,其它版本的可能略有不同。糾錯或添 加(功能)請 mailto: aeb@cwi.nl 和 aw@mail1.bet1.puv.fi 及 ragnar@lightside.ddns.org 。本程序的錯誤報告請 mailto: fileutils-bugs@gnu.ai.mit.edu 。  

[譯者]:

wangdong@163.net  

[版權協議]:

GNU's GPL 2.0 or higher

日期: Oct. 7th, 2000

(http://www.fanqiang.com    進入【UNIX論壇


相關文章
ls 命令選項詳解 (2001-04-15 19:37:13)

星期五, 三月 13, 2009

zz case语句两个常用用法

http://blog.csdn.net/zshengli/archive/2008/10/28/3166002.aspx
用法1:
case 字段 when '值1' then '结果1'
when '值2 'then '结果2'
else '结果3'
end
说明:这种用法跟C#的switch语句的功能有点相似,通过判断‘字段’不同值返回对应的‘结果’。
它在select语句中用得比较多,如:

select x,y,case z when '1' then '假' when '0' then '真' from table_v

这语句查询出来第三列会是无名列,可以这样为它取名:

select x,y,case z when '1' then '假' when '0' then '真' as 'new_z' from table_v


用法2:
case when 表达式1 then '结果1'
when 表达式2 then '结果2'
else '结果3'
end
说明:这也是很常用的用法,如:

select x, y , case when z>0 and z<60>60 and z<80>80 and z<100 then '优秀' else '成绩无效' from table_v

同样第三列也是无名列,可以用用法一中的办法为其取名。



总结:case的这两种用法都很实用,了解了它的用法后可以用它去处理一些比较复杂的逻辑。要记住的是,这两种case用法最终都返回了一个值,就像一个有返回值的方法一样,所以它不能单独执行。
发表

星期日, 三月 08, 2009

Indian Holidays this Year

Month Date Weekday Holiday Name
Mar 11-Mar-09 Wednesday Holi
Mar 27-Mar-09 Friday Ugadi/Gudi Padva
Apr 10-Apr-09 Friday Good Friday
May 1-May-09 Friday May Day
Aug 14-Aug-09 Friday Janmashtami
Sep 21-Sep-09 Monday Ramzan
Sep 28-Sep-09 Monday Vijayadasami
Oct 2-Oct-09 Friday Gandhi Jayanti
Dec 25-Dec-09 Friday Christmas