Beginning Linux Programming 笔记(二) shell编程

     shell是一种脚本语言,它是一种解释类型的语言。脚本语言跟以C为代表的高级语言的区别是脚本语言不用编译,直接通过解释代码行来工作,这种特点的好处是它的工作周期短,直接修改直接运行,不用经历冗长的编译等待。然而,这种直接解释的特点也让脚本语言本身会比较简单,在表示一些复杂的逻辑时比较困难。

    因此,通过综合使用两种类型的语言,取长补短,可以大大提高效率。像NS2(网络模拟工具)开发中,是同时配合使用TCL(脚本语言)跟C++(高级语言),把C++编写网络功能组件和模块,然后用TCL写模拟拓扑图做测试。这样做的好处是TCL脚本做调试比较方便,直接编写后即可运行做调试,大大缩短了调试周期。

 

    shell脚本也是一种命令行式的语言,可以在终端上面就可以运行,就如平常运行的ls、mkdir、cd都是shell的常用命令,用一个文件把这些脚本写下来,加上简单的逻辑控制,就是一个脚本程序。

例如:

#!/bin/sh

var="Hello World"

echo $var

exit 0

文件保存为hello,在终端里运行chmod +x hello,然后就可以执行./hello该文件了。

 

    shell变量最大的特点就是都是字符型,这个跟C的差别就比较大。对于变量,大部分情况系统都会把它当成一个字符串来处理,只有当有expr声明时,系统才会把变量当成四则运算来处理。在expr运算中,要注意常量或变量与运算符之间需要有空格。

例如: expr 1+1            //结果返回是 1+1

             expr 1 + 1         //结果返回才是2

    这个区别涉及shell的取词方式,第一个式子分析出来是两个单词:expr 跟 1+1,很明显,1+1不是一个数值,而是一个字符串,无法运算,系统自能返回1+1。而在第二个式子中,分析出来是expr、1、+、1四个单词,expr表示可以进行数值运算,结果就可以运算出2来。

 

    对于条件,C语言使用括号()括起来,而shell是使用中括号[ ],括号里面的运算返回数值(可以1或0)来作为条件转移的判断。

例如:

if [ -f fred.c ]

then

...

fi

    shell可以使用命令生成的内容作为脚本命令的一部分,使用$(command),shell会自动运行command命令,作为这一个命令参数的一部分。

例如:

for file in $(ls *.txt)

do

    echo " - $file - "

done

exit 0

    如果当前路径下有文件1.txt 、2.txt 、3.txt,第一行即等同于 for file in 1.txt 2.txt 3.txt。这个运算方式让shell表示更加方便与强大。

 

    shell的函数声明也是一个需要注意的地方。C语言函数声明需要加void、int这些返回值关键字,而shell的函数声明则非常简单。不需要关键字,也不需要参数声明。

foo() {

......

}

对于函数体,调用参数是通过$1、$2来调用第一个、第二个参数。要特别注意的是下面几个特殊的参数

$0 shell脚本的名字,对于终端命令行,多为bash

$* 所有参数,用IFS间隔开来

$@ 所有参数,不过是用空格做间隔。

    这是我关于shell语言的一个陋见,也是我觉得比较重要的地方,说得有不对的地方,还请大家多多指教。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值