现在的位置: 首页 > 综合 > 正文

Shell里的case和变量连接

2014年01月14日 ⁄ 综合 ⁄ 共 1331字 ⁄ 字号 评论关闭

Shell里的case和变量连接

 

部分来自:http://bbs.chinaunix.net/thread-542727-1-1.html

 

注意:C语言里的switch-case语句的用法,

switch(number):

{

         case 1: printf(“ 1 ”);

case 2: printf(“ 2 ”);

case 3: printf(“ 4 ”);

}

如果number的值是1,那么程序输出的是
1 2 3
这个原因是case
语句后面必须是一个整型常量,它在编译期间就进行求值,它不是任何变量,只是确定语句列表的进入点,而不是与number的值进行单个比较,我们可以把switch-case比作一条河流,中间有三个进入河流的点,只要switch-case里没有break语句,从最上游的case
1
标签开始匹配,如果相匹配可以从那个进入点到底下游,不管从哪个进入点进去,都能到下游重点。

 

1.      
Case
语句

今天和朋友讨论case语句,发现shell学习指南的case的效率不高,就想是不是shell中的caseC语言的case不同啊,下次是测试脚本:

test_case.sh

#! /bin/bash

 

case $1 in

"1")

  printf "is 1.\n"

  ;;

"1")

  printf "is 1.1\n"

  ;;

"2")

  printf "is 2.\n"

  ;;

*)

  printf "no .\n"

  ;;

Esac

 

$./ test_case.sh 1

$ 1.

通过测试可以知道,case语句在匹配了第一个‘1’的时候就跳出case语句了,如果没有跳出case语句的话,那么后面的第二个‘1’和‘*’就会执行

 

2.       变量连接

前面一段时间在搞毕业设计,遇到怎么连接两个shell变量的问题,想了很久都不知道,后面找到了方法:

1.  [root@localhost test]# a="b"

2.  [root@localhost test]# b=" c"

3.  [root@localhost test]# c=$a$b

4.  b c

而且:

1.  [root@localhost test]# b="  c"

2.  [root@localhost test]# c=$a$b

3.  [root@localhost test]# echo $c

4.  b c

即使字符’b’’c’有多个空格也只显示一个字符而已,原来是因为ShellIFS的原因:

IFS默认的是空格,制表符,换行/回车,如果变量中含有这些"字符"的话,shell会把它们解释成分割符,IFSnull,shell把这些"字符"不再解析成特殊的分割符

1.  /home/lee#a=a

2.  /home/lee#b=b

3.  /home/lee#c="$a                     $b"

4.  /home/lee#echo $c

5.  a b

6.  /home/lee#oldifs=$IFS

7.  /home/lee#echo $c

8.  a b

9.  /home/lee#IFS=

10. /home/lee#echo $c

11. a                     b

12. /home/lee#IFS=$oldifs

13. /home/lee#echo $c

14. a b

15. /home/lee#

 

抱歉!评论已关闭.