免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1946 | 回复: 7
打印 上一主题 下一主题

今天的经验及困惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-03 23:18 |只看该作者 |倒序浏览
1、我是新手,初步理解shell是学习unix的门径。目前正在看《LINUX与UNIX Shell编程指南》,我认为这本书还是不错的,至少通俗易懂,示例丰富,错误也较少。我的主要学习方法就是逐章看,然后将例子基本都试验一遍。现在书快看完了,但前面忘得也差不多了:(。。。。如果现在让我马上写点脚本,可能还真困难,不知诸位shell高手是怎么炼成的,或是有什么好书推荐的。

2、今天调试书中示例时总结了两条经验,我这点经验可能不值高手一哂,但或许有和我一样的菜鸟不知道的,所以还是写出来:

echo 时使用\c参数实现不换行,但如果有下一条echo语句,将延续不换行,这样两条echo语句的屏幕输出会累加在一行,如果加\n则会显示一空行,此时在中间插一条echo空语句就可以中止不换行了。

  1. continue_prompt()
  2. {
  3. echo "按任意键继续......\c"
  4. DUMMY=`read_a_char`
  5. echo    # 让\c不再延续的好办法 :)
  6. }
复制代码


使用set -x和set +x命令调试脚本非常方便,可以在脚本运行时显示变量取值以及循环或控制结构的执行情况,可以全程使用该命令,也可以只在认为有问题的代码段使用。(前两天我要知道就好了,不至于脚本出错时找得头昏眼花。)

  1. set -x
  2. code
  3. .......
  4. set +x
复制代码


今天碰到的问题:
发现在read变量时,如果输入了保留字,将会使条件测试失败。

  1. read NUM
  2. if [ $NUM = "" ] ; then
  3. echo "no input"
  4. else
  5. echo "$NUM,all right"
  6. fi
复制代码

运行上述代码,如果输入了!或(则脚本退出并显示:
test: argument expected
目前还不知道怎么解决。

另外就是CU发贴的小问题,由于经常用vi,所以有时手指不自觉就去按escape键,结果悲剧发生了......俺已经重写2遍这个帖子了。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-04-03 23:24 |只看该作者

今天的经验及困惑

try:

  1. echo -n "input:"
  2. read input
  3. if [[ ${#input} -eq 0 ]];then
  4. echo No input
  5. else
  6. echo $input
  7. fi
复制代码

论坛徽章:
0
3 [报告]
发表于 2005-04-03 23:41 |只看该作者

今天的经验及困惑

[quote]原帖由 "寂寞烈火"][/quote 发表:

法师,不好意思,我不太明白#input是什么意思。
我刚才试了一下,提示bad substitution,我们的shell可能不同吧,我是用SCO5.07下的ksh。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-04-03 23:47 |只看该作者

今天的经验及困惑

${#input}表示输入变量的长度
try:
if [ ${#input} -eq 0 ];then

论坛徽章:
0
5 [报告]
发表于 2005-04-04 00:54 |只看该作者

今天的经验及困惑

看了两位的帖子,对小弟也有帮助,谢谢

论坛徽章:
0
6 [报告]
发表于 2005-04-04 07:45 |只看该作者

今天的经验及困惑

原帖由 "chuanshi" 发表:
今天碰到的问题:
发现在read变量时,如果输入了保留字,将会使条件测试失败。
  1. read NUM
  2. if [ $NUM = "" ] ; then
  3. echo "no input"
  4. else
  5. echo "$NUM,all right"
  6. fi
复制代码


运行上述代码,如果输入了!或(则脚本退出并显示:
test: argument expected
目前还不知道怎么解决。

试试把[]中的$NUM改为"$NUM"

论坛徽章:
0
7 [报告]
发表于 2005-04-05 17:18 |只看该作者

今天的经验及困惑

在条件判断中应该用   “==”  而不是 "="

改成这样:

            read NUM
                     if [ $NUM == "" ] ; then
                     echo "no input"
                     else
                     echo "$NUM,all right"
                     fi

论坛徽章:
0
8 [报告]
发表于 2005-04-05 17:32 |只看该作者

今天的经验及困惑

楼主,你的精神和我写《我的函数库〉的初衷是一样的,希望大家多交流。

你说:
“使用set -x和set +x命令调试脚本非常方便,可以在脚本运行时显示变量取值以及循环或控制结构的执行情况,可以全程使用该命令,也可以只在认为有问题的代码段使用。“

我想说有时候你这个办法,也不顶用,还是要对基本概念比较熟悉,因为出错提示往往不明确;另外你能用的东西,别人系统恐怕不行。
希望多交流!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP