免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5047 | 回复: 15

[学习共享] shell入门(暂发if和case语句) [复制链接]

论坛徽章:
39
双子座
日期:2014-08-06 17:37:19极客徽章
日期:2016-12-07 14:03:402017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之新疆
日期:2017-03-24 16:36:1915-16赛季CBA联赛之江苏
日期:2017-04-26 17:19:08黑曼巴
日期:2018-03-07 18:56:5615-16赛季CBA联赛之八一
日期:2018-03-09 10:44:1015-16赛季CBA联赛之江苏
日期:2018-03-12 15:12:1915-16赛季CBA联赛之青岛
日期:2018-03-16 09:13:0515-16赛季CBA联赛之山东
日期:2018-04-27 18:23:0515-16赛季CBA联赛之新疆
日期:2018-05-04 11:29:30
发表于 2014-07-14 00:30 |显示全部楼层
本帖最后由 o枫叶o飘零 于 2014-07-14 08:59 编辑

小弟不才
只会一些浅显的东西   有错误的地方请各位毫不留情的指出来:" />:" />
闭门造车只会使你的知识面和技能面越来越窄
所以
如果有shell问题的    愿意交流的大神    请加六神建的群302706076(里面都是大神)

补充一句    我的环境是rhel6.4
GNU Bash-4.1                   2009 December 29                        BASH(1)
(环境不一样,可能语法不一样,或语法不存在)


if用法


  1. if
  2. 条件;
  3. then
  4. 动作
  5. fi
复制代码

  1. if
  2. 条件;
  3. then
  4. 动作1
  5. else
  6. 动作2
  7. fi
复制代码


  1. if
  2. 条件1;
  3. then
  4. 动作1
  5. elif
  6. 条件2;
  7. then
  8. 动作2
  9. else
  10. 动作3
  11. fi
复制代码


用法解释

  1. 如果
  2. 条件是;

  3. 接下来的动作;
  4. 完毕
复制代码



  1. 如果
  2. 条件是;

  3. 动作1;
  4. 否则
  5. 动作2;
  6. 完毕
复制代码


  1. 如果
  2. 条件1;

  3. 动作1;
  4. 或者
  5. 条件2;

  6. 动作2;
  7. 否则
  8. 动作3;
  9. 完毕
复制代码



栗子如下
  1. read num
复制代码


  1. read num
复制代码


  1. read num
复制代码

  1. if
  2. [ $num -eq 1 ];
  3. then
  4. echo "输入的字符等于1"
  5. fi
复制代码



  1. if
  2. [ $num -eq 1 ];
  3. then
  4. echo "你输入的字符等于1"
  5. else
  6. echo "你输入的字符不等于1"
  7. fi
复制代码

  1. if
  2. [ $num eq 1 ];
  3. then
  4. echo "你输入的字符等于1";
  5. elif
  6. [ $num eq 2 ];
  7. then
  8. echo "你输入的字符等于2";
  9. else
  10. echo "你输入的字符既不等于1 ,也不等于2"
复制代码

解释如下你可以直接把上面的用法解释套进去)
第一行的意思是 从键盘读取按键操作,把按键操作记录下后 定义成一个变量,变量名为num
如果
变量=1

屏幕显示    输入的字符为1
完毕
如果
变量=1

屏幕显示 你输入的字符等于1
否则
屏幕显示 你输入的字符不等于1
完毕
如果
变量=1

屏幕显示 你输入的字符等于1
或者
变量=2

屏幕显示 你输入的字符等于2
否则
屏幕显示 你输入的字符既不等于1,也不等于2


if语句完毕













case语句   


  1. case 变量 in
  2. 值1)
  3. 动作1;;
  4. 值2)
  5. 动作2;;
  6. 值3)
  7. 动作3;;
  8. ...
  9. esac
复制代码


  1. case 变量 in
  2. 值1)
  3. 动作1;;
  4. 值2)
  5. 动作2;;
  6. 值2)
  7. 动作3;;
  8. ...
  9. esac
复制代码


  1. case 变量 in
  2. 值1)
  3. 动作1;:
  4. 值2)
  5. 动作2;&
  6. 值3)
  7. 动作3;;
  8. ...
  9. esac
复制代码

  1. case 变量 in
  2. 值1)
  3. 动作1;;
  4. 值2)
  5. 动作2;;&
  6. 值2)
  7. 动作3;;
  8. ...
  9. esac
复制代码



请仔细看红色粗体部分,要不然你会认为这3个语句没有区别,  其实区别比较大


直接举栗子吧,表达能力有限,无法进行用法解释

  1. read num
复制代码

  1. case $num in
  2. 1)
  3. echo "one";;
  4. 2)
  5. echo "two";;
  6. 3)
  7. echo "three";;
  8. esac
复制代码

  1. case $num in
  2. 1)
  3. echo "one";;
  4. 2)
  5. echo "two";;
  6. 2)
  7. echo "three";;
  8. esac
复制代码

  1. case $num in
  2. 1)
  3. echo "one";;
  4. 2)
  5. echo "two";&
  6. 3)
  7. echo "three";;
  8. esac
复制代码

  1. case $num in
  2. 1)
  3. echo "one";;
  4. 2)
  5. echo "two";;&
  6. 2)
  7. echo "three";;
  8. esac
复制代码

第1列和第2列的差别我说一下
esac的一般的匹配规则是   先匹配的先执行,然后结束
所以第1列执行的结果是
如果键盘上按1则屏幕上显示    one
如果键盘上按2则屏幕上显示    two
如果键盘上按3则屏幕上显示    three
第2列执行的结果是
如果键盘上按1则屏幕上显示    one
如果键盘上按2则屏幕上显示    two                  不会显示three


第1列和第3列   第2列和第4列  语句结构是一样的  只是动作的结尾符号不一样
第3列的执行结果是
如果键盘上按1则屏幕上显示    one
如果键盘上按2则屏幕上显示    two
                                        three
如果键盘上按3则屏幕上显示    three


第4列的执行结果是、

如果键盘上按1则屏幕上显示    one
如果键盘上按2则屏幕上显示    two
                                         three
当case语句中执行结果结尾的符号不通时  脚本的执行结果也会不通
;;               表示标准的匹配模式   先匹配的执行,不继续下一个匹配
;&             匹配成功第一个后,执行第一个,不论下一个是否匹配,也会执行下一个
;;&            匹配成功后,执行,然后继续向下查找匹配








论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2014-07-14 00:43 |显示全部楼层
楼主好有心思,赞一个~{:2_172:}

论坛徽章:
39
双子座
日期:2014-08-06 17:37:19极客徽章
日期:2016-12-07 14:03:402017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:39:4215-16赛季CBA联赛之新疆
日期:2017-03-24 16:36:1915-16赛季CBA联赛之江苏
日期:2017-04-26 17:19:08黑曼巴
日期:2018-03-07 18:56:5615-16赛季CBA联赛之八一
日期:2018-03-09 10:44:1015-16赛季CBA联赛之江苏
日期:2018-03-12 15:12:1915-16赛季CBA联赛之青岛
日期:2018-03-16 09:13:0515-16赛季CBA联赛之山东
日期:2018-04-27 18:23:0515-16赛季CBA联赛之新疆
日期:2018-05-04 11:29:30
发表于 2014-07-14 09:01 |显示全部楼层
擦擦擦  把代码code了    就不能加粗变色了

论坛徽章:
1
处女座
日期:2014-09-18 16:18:00
发表于 2014-07-14 09:23 |显示全部楼层
赞一个共同学习进步

论坛徽章:
0
发表于 2014-07-14 10:31 |显示全部楼层
学习学习,期待后续的分享。。。。

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
发表于 2014-07-14 11:45 |显示全部楼层

大赞

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
发表于 2014-07-14 13:03 |显示全部楼层
楼主真有心.. 支持分享

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
发表于 2014-07-14 13:04 |显示全部楼层
我也来赞一个,顺便学习一下~~~

论坛徽章:
11
CU十二周年纪念徽章
日期:2013-10-24 15:41:342015年辞旧岁徽章
日期:2015-03-03 16:54:15丑牛
日期:2015-01-14 10:36:40技术图书徽章
日期:2015-01-12 15:46:11白羊座
日期:2014-11-14 09:35:36狮子座
日期:2014-10-30 13:18:49巳蛇
日期:2014-10-11 12:52:08子鼠
日期:2014-09-28 14:11:06双鱼座
日期:2014-04-22 13:05:48午马
日期:2014-02-11 17:58:002015年迎新春徽章
日期:2015-03-04 09:55:28
发表于 2014-07-14 13:05 |显示全部楼层
楼主有心,共同学习,共同提高!

论坛徽章:
0
发表于 2014-07-14 14:59 |显示全部楼层
回复 1# o枫叶o飘零

楼主:


    我在c-shell下按照楼主的总结写了一个小脚本:
#!/bin/sh
set num=$<
echo $num
case $num in
1) echo "one";;
2) echo "two";;
esac

source 运行后
如果输入1,则会输出
1
case: Too many arguments.

这是什么意思啊?我哪里写错了么???

使用set已经将数读进num中了呀,为毛case语句会报错呢?
!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP