Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2422898
  • 博文数量: 298
  • 博客积分: 7876
  • 博客等级: 准将
  • 技术积分: 5500
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-23 13:39
文章存档

2013年(2)

2012年(142)

2011年(154)

分类: Python/Ruby

2012-03-15 12:23:44

Shell里的case和变量连接

 

部分来自:

 

注意: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#

 

阅读(3368) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~