XJ;zx:?
^6zV'r一、构造字符串BSD爱好者乐园g,OZET0h/uDQ
)N}1o(f)d8[:dM直接构造BSD爱好者乐园6E)^M|#Y;w6N/P
STR_ZERO=helloBSD爱好者乐园X;Qx$G
{y2\
STR_FIRST="i am a string"BSD爱好者乐园:l/{i2YIO~/FB$S
STR_SECOND='success'BSD爱好者乐园 v\n n&yo$t8d F2P
BSD爱好者乐园)h(_L#i1c重复多次BSD爱好者乐园(G4\
s:^1`;z:XoBe
#repeat the first parm($1) by $2 timesBSD爱好者乐园 WnA Wbe!Xt-m e
strRepeat()
*DKD/v2\,[{BSD爱好者乐园'a/J(x6_7Zp)_4F
local x=$2BSD爱好者乐园#b:L| Y m
if [ "$x" == "" ]; then
j@*Zp ox=0BSD爱好者乐园sXt!`NPT5F%im
fiBSD爱好者乐园9@pMQ~0A`9W&w
BSD爱好者乐园)z-Di\flocal STR_TEMP=""BSD爱好者乐园(C$e4V9Wp(R~&M{;b4T
while [ $x -ge 1 ];
;Y4_pE3G0vXdo
f3_&R
I1mo'c@:TSTR_TEMP=`printf "%s%s" "$STR_TEMP" "$1"`
0n*T4q'o"aC J^(Y9Lx=`expr $x - 1`
%b^ E8_~#EdoneBSD爱好者乐园)SM6[ J#kO
echo $STR_TEMP
k@N'@/uMmJ}BSD爱好者乐园&M5n.]#g|
#d8k%]%W8w7U(Y举例:
+E$LI
Ig1KY&]1V.}6Vx;ASTR_REPEAT=`strRepeat "$USER_NAME" 3`
hZ2EtfKecho "repeat = $STR_REPEAT"BSD爱好者乐园:\VOY;b
Ig
BSD爱好者乐园%^5l7C,?5f二、赋值与拷贝
j-c$K3}&l3JfQ6V.W
t#`.U直接赋值BSD爱好者乐园 P(n0gl z
与构造字符串一样
2\]9o1o)o.b U)IUSER_NAME=terry
e#o-m,v7F5P.BBSD爱好者乐园 n-{6P8Kb从变量赋值BSD爱好者乐园 X8W2c!b#^6j*yt\-V-Q
ALIASE_NAME=$USER_NAME
%nW.~O-QP"?*kmc$Z!q
J9ag三、联接
vP C4t&n/y2ZWBSD爱好者乐园?'XJ'z,G直接联接两个字符串BSD爱好者乐园
NJ A@'UnU"`
STR_TEMP=`printf "%s%s" "$STR_ZERO" "$USER_NAME"`
.W#bNiX,xJ'x使用printf可以进行更复杂的联接
5p1TgTnBSD爱好者乐园h A0eg/eF}四、求长BSD爱好者乐园j8tmPD
BSD爱好者乐园0oU6Dt+H求字符数(char)BSD爱好者乐园6DKQDQ!X"a
COUNT_CHAR=`echo "$STR_FIRST" | wc -m`
l\)Y7]@echo $COUNT_CHAR
S1g+Ap2n4G
[ P"rBSD爱好者乐园9]9xU.Hd&s求字节数(byte)BSD爱好者乐园1c9S#v4D5@6fN5D {
COUNT_BYTE=`echo "$STR_FIRST" | wc -c`BSD爱好者乐园f lej(U(b
echo $COUNT_BYTE
WA,k p"D,R1RY4z\"z&__求字数(word)
H'k+o+I;}h'_*f1}]COUNT_WORD=`echo "$STR_FIRST" | wc -w`
P#x9zM@2NR
pR Aecho $COUNT_WORD
e;Pk_x
v"e;OBSD爱好者乐园6}w9JY.k!F五、比较
Sf(M.TJF v rb'IBSD爱好者乐园rxV`%|.f相等比较
l*C-^!D1emp2~str1 = str2BSD爱好者乐园w!R2Rv'J Fkw8B
BSD爱好者乐园'ASTd:cq'nE6z5\Z不等比较
-b0dz r$gGo$Astr1 != str2BSD爱好者乐园b:Lw c;p
D~&d1m?举例:BSD爱好者乐园v(M7u
NK8d'lg {#T
if [ "$USER_NAME" = "terry" ]; then
3n;T*J,_t
Iecho "I am terry"BSD爱好者乐园Q"P Y DH%\
w4E
fi
;i*ul.i5q `{:HU1S/H:K\&?/Q0X6n-jy小于比较BSD爱好者乐园#rhcE5pG{'X
#return 0 if the two string is equal, return 1 if $1 < $2, else 2strCompare() { local x=0 if [ "$1" != "$2" ]; then x=2 localTEMP=`printf "%sn%s" "$1" "$2"` local TEMP2=`(echo "$1"; echo "$2") |sort` if [ "$TEMP" = "$TEMP2" ]; then x=1 fi fi echo $x }BSD爱好者乐园A zlc-a]E4jO3p
z SQ`
MS0UZK六、测试BSD爱好者乐园(YE.of*d)\0p
9EKY(w@ H0OI判空BSD爱好者乐园o,F&S&Vk
-z strBSD爱好者乐园'J"I"?
fr-~q M
BSD爱好者乐园#?
py3x"E;[tg判非空BSD爱好者乐园Q2NsC)Gl
-n strBSD爱好者乐园,k]0FvP-\RT
6T/|4gC'm!j H是否为数字BSD爱好者乐园f dt]p
# return 0 if the string is num, otherwise 1BSD爱好者乐园;M b^T3S9H
strIsNum()
R*aq[&T{BSD爱好者乐园$cjW;oD`T5z
local RET=1BSD爱好者乐园`0u)T2W`D
if [ -n "$1" ]; then
:@"ab6W'T'@9o$olocal STR_TEMP=`echo "$1" | sed 's/[0-9]//g'`BSD爱好者乐园yC%R-wS z6\'j,cIy
if [ -z "$STR_TEMP" ]; thenBSD爱好者乐园5JYIdXz9n
RET=0
"t
Jt'H_9uG+I(}Pfi
(?w8S#~HfiBSD爱好者乐园@
^W(b4yf$E
echo $RET
9Z'{({[:m Kf2`}
1Rq \|,EwBSD爱好者乐园W;d8] b*jF/\R/{8N[.Ya举例:BSD爱好者乐园+e$l?c,NN'|"YW
if [ -n "$USER_NAME" ]; then
|.]4Pqe#Jm;i2V4eqecho "my name is NOT empty"
HF'A/L}Z9E
Zfi
t(m,Pl*g%O|
xKe']3E0?+xBSD爱好者乐园;^m\ l
CD VGecho `strIsNum "9980"`
1A9y(mX
R|x@BQawP*T七、分割
KOawJV3i1cmk){BSD爱好者乐园sVV2jP以符号+为准,将字符分割为左右两部分BSD爱好者乐园yC5i_)E0Qt'N
使用sedBSD爱好者乐园D2Y+tH1ob
举例:
Z)BKL l命令 date --rfc-3339 seconds 的输出为
PZ;^lP"M~9i2007-04-14 15:09:47+08:00BSD爱好者乐园+XU
\Ko1B8Y_ltJ?
取其+左边的部分BSD爱好者乐园^-U+hNP;B,Y
date --rfc-3339 seconds | sed 's/+[0-9][0-9]:[0-9][0-9]//g'BSD爱好者乐园7}"c`jR}}
输出为BSD爱好者乐园I)Y"u#}*d;H6E
2007-04-14 15:09:47BSD爱好者乐园As*R7Z%f jb&^
取+右边的部分BSD爱好者乐园h/D&w.?y*\[ L
date --rfc-3339 seconds | sed 's/.*+//g'BSD爱好者乐园&V$tFIZRL1M
输出为BSD爱好者乐园kt
oQ3@w/e;G8r.z
08:00
{4N+w5A:D.w't.W
F6w#k(e以空格为分割符的字符串分割BSD爱好者乐园(W3^ut6N {t(|
使用awk
W:q)hKIB举例:
CM*j#zy;oSTR_FRUIT="Banana 0.89 100"BSD爱好者乐园
K!VNYp)H'i
取第3字段
-q8yQ0_\5R%E1p%a4R5_echo $STR_FRUIT | awk '{ print $3; }'BSD爱好者乐园@)wSI+t-cB;So
FV/y:z h,T&c0~八、子字符串BSD爱好者乐园8Z p-`P\V
W(K
?4y$P'B.je/HNk字符串1是否为字符串2的子字符串
#X_R"{]b'H Pj# return 0 is $1 is substring of $2, otherwise 1
3WLx p,i xFD^n^c astrIsSubstring()BSD爱好者乐园0Fs"_2b\
{BSD爱好者乐园A |BC8^0Q8^*|Sw
local x=1
:JL,b5eR)v,|"icase "$2" in
~CKLXM*$1*) x=0;;
5yv,r0xwZBesac
H/ROF fe:DI@echo $xBSD爱好者乐园1l,{3w.BHaF8{j:NiO
}
|?(t y*v.{_!n.z8j0tL j#^一、Linux shell 截取字符变量的前8位,有方法如下:
\*A*z Q9U g%`"jI$wBSD爱好者乐园(}6MN&t}N/F`1.expr substr “$a” 1 8BSD爱好者乐园-e!_"}*_`4Z@ Bu\
2.echo $a|awk ‘{print substr(,1,8)}’BSD爱好者乐园3^8x(jc#J8]9P gdJ
3.echo $a|cut -c1-8BSD爱好者乐园-t$KX"Ol,l)jo P
4.echo $BSD爱好者乐园Q%}&OTL-h1R({
5.expr $a : ‘(.).*’
.so/UCA/M6.echo $a|dd bs=1 count=8 2>/dev/null
f%q6\,P;c0yBSD爱好者乐园&a0a
L/CFE1K
xQ二、按指定的字符串截取BSD爱好者乐园A"Z(D3fp%EK
^G
\U*l5e0H1、第一种方法:
u4End$^a!e- ${varible##*string} 从左向右截取最后一个string后的字符串
- ${varible#*string}从左向右截取第一个string后的字符串
- ${varible%%string*}从右向左截取最后一个string后的字符串
- ${varible%string*}从右向左截取第一个string后的字符串
BSD爱好者乐园~GZ5p'I;T2{.p“*”只是一个通配符可以不要
0~'Bt6n2r5PBSD爱好者乐园S9Qp"h E,L1x7z3y例子:
F#~:@aM:t.Ap"^-F$ MYVAR=foodforthought.jpgBSD爱好者乐园cnf
Kr9P:Q
$ echo ${MYVAR##*fo}
tI(x M&Ct5I6uS.?rthought.jpg
(?jKe7n
@7T;^$ echo ${MYVAR#*fo}BSD爱好者乐园%c:`
[/O^?#v
odforthought.jpg
!Y&\.\*^jdBSD爱好者乐园
x$_bYW9g9OZ2、第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。
%U\G#}S"QD
SBSD爱好者乐园ui |9`^&gS;C可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行:
2}r%T?)Hjh N$ EXCLAIM=cowabungaBSD爱好者乐园2dKBt%e0AQk
$ echo ${EXCLAIM:0:3}BSD爱好者乐园:arbsud1v4|
cowBSD爱好者乐园?3JSO)R3T
$ echo ${EXCLAIM:3:7}BSD爱好者乐园^(~E.fmtz2YS
abungaBSD爱好者乐园$i@ {?6}
BSD爱好者乐园(I(M&J$k` }~ V%G这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。BSD爱好者乐园;V}:L } UCTy3d%i:M+aP
f5H
z0AX三、按照指定要求分割:BSD爱好者乐园S8s'Vl)\S
比如获取后缀名BSD爱好者乐园;z!i.g]o@y
ls -al | cut -d “.” -f2
$l ywb,j`%f3i[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG:
shell
字符串
最新评论
删除 Guest (2010-5-11 22:01:49, 评分: 5 )