shell学习

huha 2009-11-12

字符的处理:

1.计算字符串长度

echo“$str”|awk‘{printlength($0)}’

exprlength“$str”

echo“$str”|wc-c

2.判断字符串是否为空

if["$str"=""]

if[x"$str"=x]

if[-z"$str"]

3

${file#*/}:拿掉第一條/及其左邊的字串:dir1/dir2/dir3/my.file.txt

${file##*/}:拿掉最後一條/及其左邊的字串:my.file.txt

${file#*.}:拿掉第一個.及其左邊的字串:file.txt

${file##*.}:拿掉最後一個.及其左邊的字串:txt

${file%/*}:拿掉最後條/及其右邊的字串:/dir1/dir2/dir3

${file%%/*}:拿掉第一條/及其右邊的字串:(空值)

${file%.*}:拿掉最後一個.及其右邊的字串:/dir1/dir2/dir3/my.file

${file%%.*}:拿掉第一個.及其右邊的字串:/dir1/dir2/dir3/my

記憶的方法為:

#是去掉左邊(在鑑盤上#在$之左邊)

%是去掉右邊(在鑑盤上%在$之右邊)

單一符號是最小匹配﹔兩個符號是最大匹配

正则表达式式:

http://hi.baidu.com/nxswxxg/blog/item/b96fddd1907856db562c8423.html

#!/bin/bash

#liaolj测试

#n=1

#:$((n++))

#echo$n

#区别按位反与按位非的区别

#n=1

#letn=$((~n))

#echo"按位反:"$n#-2

#letn=$((!n))

#echo"按位非:"$n#0

#进制

#其他进制:BASE#NUMBERBASE(2-64之间)

#letn="32#77"

#echo$n#231

#let"b64=4#@_"

#echo$b64

#求字符串长度

#liaolj=ynwuupl

#echo${#liaolj}

#echo`exprlength$liaolj`

#echo`expr"$liaolj":'.*'`

#匹配字符串开头的子串长度

#exprmatch"$string"'$substring'substring是一个正则表达式

#expr"$string":'$substring'单引号和双引号是一样的

#liaolj=ynwuupl

#echo`exprmatch"$liaolj"".*"`

#echo`expr"$liaolj":'.*'`

#索引

#exprindex$string$substring

#在字符串$string中所匹配到的$substring第一次出现的位置

#liaolj=ynwuupl

#echo`exprindex"$liaolj"uu`

#echo`exprindex$liaoljuu`#没有引号也是可以的

#提取子串

#${string:position}

#在string中从位置$position开始提取子串

#如果string是"*"或者"@",那么将会提取从位置position开始的位置参数

#${string:position:length}

#在string中从位置position开始提取length长度的子串

#liaolj=ynwuupl

#echo${liaolj:3}#uupl

#echo${liaolj:3:2}#uu

#echo${liaolj:-3}#ynwuupl

#echo${liaolj:-3}#upl

#echo${liaolj:(-3)}#upl

#echo${*:0}#显示第0个参数后面的所有参数

#

#exprsubstr$string$position$length

#liaolj=ynwuupl

#exprsubstr$liaolj35#length参数必须有

#

#exprmatch"$string"'\($substring\)'

#expr"$string":'\($substring\)'

#liaolj=ynwuupl

#exprmatch$liaolj'\(...[uU].\)'#ynwuu

#

#exprmatch"$string"'.*\($substring\)'

#expr"$string":'.*\($substring\)'

#从string的结尾提取substring,substring是正则表达式

#子串削除

#${string#substring}

#从string的开头位置截掉最短匹配的substring

#${string##substring}

#从string的开头位置截掉最长匹配的substring

#liaolj=abcABC123ABCabc

#echo${liaolj#a*C}#123ABCabc

#echo${liaolj##a*C}#abc

#

#${string%substring}

#从string的结尾位置截掉最短匹配的substring

#${string%%substring}

#从string的结尾位置截掉最长匹配的substring

#liaolj=abcABC123ABCabc

#echo${liaolj%b*c}#abcABC123ABCa

#echo${liaolj%%b*c}#a

#子串替换

#{string/substring/replacement}

#使用replacement来替换第一个匹配的substring

#{string//substring/replacement}

#使用replacement来替换所有匹配的substring

#liaolj=ynwuupl

#echo${liaolj/u/p}#ynwupupl

#echo${liaolj//u/p}#ynwupppl

#

#${string/#substring/replacement}

#如果substring匹配string的开头号部分,那么就用replacement来替换substring的开头部分

#{string/%substring/replacement}

#如果substring匹配string的结尾部分,那么就用replacement来替换substring的结尾部分

#使用awk来处理字符串

#bash脚本也可以调用awk的字符串操作功能来代替它自已的内置功能

#参数替换

#${parameter}

#${parameter-default},${parameter:-default}

#echo${1-liaolj}#liaolj

#echo$1#liaolj

#

#{parameter=default},${parameter:=default}

#如果变量parameter没声明,那么就用default的值

#echo${username=`liaolj`}#报错``其中放得是命令

#echo${1=`liaolj`}#报错

#echo${username=liaolj}#liaolj

#echo${a:=liaolj}

#${parameter+alt_value},${parameter:+alt_value}

#如果parameter被声明就用alt_value,否则就用null

#遝cho${1+ynw}#如果传参时为ynw,否则为nul

#

#${parameter?err_msg},${parameter:?err_msg}

#如果parameter已声就用原来的值,如果没有声明,打印错误信息

#echo${1?error:你好懒!}

#:${1?"Usage:$0ARGUMENT"}

#进制之间转换

#echo'obase=2;ibase=10;255'|bc

#echo;echo"Hitakey,thenhitreturn."

#readKeypress

#case"$Keypress"in

#[[:lower:]])echo"Lowercaseletter";;

#[[:upper:]])echo"Uppercaseletter";;

#[0-9])echo"Digit";;

#*)echo"Punctuation,whitespace,orother";;

#esac#允许字符串的范围出现在[中括

#a=`echo"HELLO"|trA-Za-z`

#echo$a

#a=`echo"ynwuupl"|tr-du`

#echo$a

#echo-n"Thisstringsplits

#17ontwolines."

baseName=app

today=`date+%y%m%d`

echo${baseName}${today}.img

echoappp

grep命令:http://fanqiang.chinaunix.net/system/linux/2007-03-15/5110.shtml

相关推荐