linux字符动画脚本,linux shell脚本中如何自由操作字符串

子串削除${string#substring}

从$string的开头位置截掉最短匹配的$substring.${string##substring}

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

1 stringZ=abcABC123ABCabc

2 # |----|

3 # |----------|

4

5 echo ${stringZ#a*C} # 123ABCabc

6 # 截掉'a'到'C'之间最短的匹配字符串.

7

8 echo ${stringZ##a*C} # abc

9 # 截掉'a'到'C'之间最长的匹配字符串.

${string%substring}

从$string的结尾位置截掉最短匹配的$substring.${string%%substring}

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

1 stringZ=abcABC123ABCabc

2 # ||

3 # |------------|

4

5 echo ${stringZ%b*c} # abcABC123ABCa

6 # 从$stringZ的结尾位置截掉'b'到'c'之间最短的匹配.

7

8 echo ${stringZ%%b*c} # a

9 # 从$stringZ的结尾位置截掉'b'到'c'之间最长的匹配.

当你需要构造文件名的时候, 这个操作就显得特别有用.

例子 9-11. 转换图片文件格式, 同时更改文件名1 #!/bin/bash

2 # cvt.sh:

3 # 将一个目录下的所有MacPaint格式的图片文件都转换为"pbm"各式的图片文件.

4

5 # 使用"netpbm"包中的"macptopbm"程序进行转换,

6 #+ 这个程序主要是由Brian Henderson(bryanh@giraffe-data.com)来维护的.

7 # Netpbm绝大多数Linux发行版的标准套件.

8

9 OPERATION=macptopbm

10 SUFFIX=pbm # 新的文件名后缀.

11

12 if [ -n "$1" ]

13 then

14 directory=$1 # 如果目录名作为参数传递给脚本...

15 else

16 directory=$PWD # 否则使用当前的工作目录.

17 fi

18

19 # 假定目标目录中的所有文件都是MacPaint格式的图像文件,

20 #+ 并且都是以".mac"作为文件名后缀.

21

22 for file in $directory/* # 文件名匹配(filename globbing).

23 do

24 filename=${file%.*c} # 去掉文件名的".mac"后缀

25 #+ ('.*c' 将会匹配

26 #+ '.'和'c'之间任意字符串).

27 $OPERATION $file > "$filename.$SUFFIX"

28 # 把结果重定向到新的文件中.

29 rm -f $file # 转换后删除原始文件.

30 echo "$filename.$SUFFIX" # 从stdout输出转换后文件的文件名.

31 done

32

33 exit 0

34

35 # 练习:

36 # -----

37 # 就像它现在的样子, 这个脚本把当前

38 #+ 目录下的所有文件都转换了.

39 # 修改这个脚本, 让它只转换以".mac"为后缀名的文件.

例子 9-12. 将音频流文件转换为ogg各式的文件1 #!/bin/bash

2 # ra2ogg.sh: 将音频流文件(*.ra)转换为ogg格式的文件.

3

4 # 使用"mplayer"媒体播放器程序:

5 #

6 # 可能需要安装合适的编解码程序(codec)才能够正常的运行这个脚本.

7 # 需要使用"ogg"库和"oggenc":

8 #

9

10

11 OFILEPREF=${1%%ra} # 去掉"ra"后缀.

12 OFILESUFF=wav # wav文件的后缀.

13 OUTFILE="$OFILEPREF""$OFILESUFF"

14 E_NOARGS=65

15

16 if [ -z "$1" ] # 必须要指定一个需要转换的文件名.

17 then

18 echo "Usage: `basename $0` [filename]"

19 exit $E_NOARGS

20 fi

21

22

23 ##########################################################################

24 mplayer "$1" -ao pcm:file=$OUTFILE

25 oggenc "$OUTFILE" # oggenc编码后会自动加上正确的文件扩展名.

26 ##########################################################################

27

28 rm "$OUTFILE" # 删除中介的*.wav文件.

29 # 如果你想保留这个文件的话, 可以把上边这行注释掉.

30

31 exit $?

32

33 # 注意:

34 # ----

35 # 在网站上, 简单的在*.ram流音频文件上单击的话,

36 #+ 一般都只会下载真正音频流文件(就是*.ra文件)的URL.

37 # 你可以使用"wget"或者一些类似的工具

38 #+ 来下载*.ra文件本身.

39

40

41 # 练习:

42 # -----

43 # 像上面所看到的, 这个脚本只能够转换*.ra文件.

44 # 给这个脚本添加一些灵活性, 让它能够转换*.ram and other filenames.

45 #

46 # 如果你觉得这还不过瘾, 那么你可以扩展这个脚本,

47 #+ 让它自动下载并转换音频流文件.

48 # 给出一个URL, (使用"wget")批处理下载音频流文件,

49 #+ 然后转换它们.

一个简单的命令的模拟, 使用子串提取结构.

例子 9-13. 模拟getopt1 #!/bin/bash

2 # getopt-simple.sh

3 # 作者: Chris Morgan

4 # 已经经过授权, 可以使用在本书中.

5

6

7 getopt_simple()

8 {

9 echo "getopt_simple()"

10 echo "Parameters are '$*'"

11 until [ -z "$1" ]

12 do

13 echo "Processing parameter of: '$1'"

14 if [ ${1:0:1} = '/' ]

15 then

16 tmp=${1:1} # 去掉开头的'/' . . .

17 parameter=${tmp%%=*} # 提取参数名.

18 value=${tmp##*=} # 提取参数值.

19 echo "Parameter: '$parameter', value: '$value'"

20 eval $parameter=$value

21 fi

22 shift

23 done

24 }

25

26 # 把所有选项传给函数getopt_simple().

27 getopt_simple $*

28

29 echo "test is '$test'"

30 echo "test2 is '$test2'"

31

32 exit 0

33

34 ---

35

36 sh getopt_example.sh /test=value1 /test2=value2

37

38 Parameters are '/test=value1 /test2=value2'

39 Processing parameter of: '/test=value1'

40 Parameter: 'test', value: 'value1'

41 Processing parameter of: '/test2=value2'

42 Parameter: 'test2', value: 'value2'

43 test is 'value1'

44 test2 is 'value2'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值