全部博文(298)
分类: 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中的case跟C语言的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’有多个空格也只显示一个字符而已,原来是因为Shell的IFS的原因:
IFS默认的是空格,制表符,换行/回车,如果变量中含有这些"字符"的话,shell会把它们解释成分割符,将IFS置null,则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#