Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1145938
  • 博文数量: 646
  • 博客积分: 288
  • 博客等级: 二等列兵
  • 技术积分: 5375
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-08 14:33
个人简介

为了技术,我不会停下学习的脚步,我相信我还能走二十年。

文章分类

全部博文(646)

文章存档

2014年(8)

2013年(134)

2012年(504)

分类:

2012-07-06 20:27:09

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#

 

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