《Linux Shell编程学习笔记之三》

《Linux Shell编程学习笔记之三》

1、运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

    #!/bin/bash
    val=`expr 2 + 2`
    echo "Total value : $val"

注意:表达式和运算符之间要有空格。

算数运算符、关系运算符、布尔运算符、字符串运算符这些用法都比较简单哈,可能具体语法有一点点差异,在我们实际编程中,我们可以参考下网上的资料。

在自己实践过程中,再一次让我注意到了Shell编程中,像类似于“=”两边的表达式都不能有空格。不然会报错,这个需要我们注意。

在Shell中有的需要有空格,有的又不能有空格,确实比较蛋疼哈,因此就需要我们多实践总结

2、注释

以“#”开头的行就是注释,会被解释器忽略。

注意:sh里没有多行注释,只能每一行加一个#号。

3、字符串

字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号

例如:

    str='wojiushimogui'
    echo $str    #输出:wojiushimogui
    echo 'hello,$str'  #输出:hello,$str.即单引号字符串中的变量是无效的

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

双引号

一般情况下,我们就是使用的是双引号,就没有单引号中的限制了,如下:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

练习的小例子如下:

4、数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。

4.1、定义数组

定义数组有两种格式:如下:

第一种

array_name=(value0 value1 value2 value3) #元素之间用空格分开

第二种:单独定义数组的各个分量

例如:

arr[0]="heihei"
arr[1]="wojiushimogui"

可以不使用连续的下标,而且下标的范围没有限制

4.2、读取数组

获取数组中索引为index的语法如下:

语法:${array_name[index]}。

获取数组的全部元素的语法如下:

${array_name[*]}
${array_name[@]}

获取整个数组长度的语法如下:

${#array_name[*]}
${#array_name[@]}

获取数组中索引为index元素的长度的语法如下:

${#array_name[index]}

看一个例子,是对以前知识点的一个应用。

5、条件语句(if)

在shell中有三种形式,与其它语言类似。

直接看一个例子,如下:

需要注意的是:if [ expression ] 中expression与方括号[]之间必须要有空格,否则会报语法错误。

6、case语句

case 值 in
模式1) 
    command
    ;;       #两个分号的作用与Java/C中的break语句的作用相同
模式2)
    command2
    ;;
*)
    command3
    ;;
esac

case语句的一点细节:取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。

7、for(while)循环的基本语法

for 变量 in 列表
do
    command1
    command2
    ...
    commandN
done

while command
do
   Statement(s) to be executed if command is true
done

除了while循环,还有until循环

until 循环执行一系列命令直至条件为 true 时停止。until 循环与 while 循环在处理方式上刚好相反。一般while循环优于until循环,但在某些时候,也只是极少数情况下,until 循环更加有用。

在实践过程中,遇到几个小问题

1、运算符两边都要有空格,如下,否则会报错

1、count=`expr ${count} + 1`

2、while语句中的条件要使用方括号[] 括起来,并且要有空格,否则要报错。

有的需要留空格,有的不能留空格,确实比较蛋疼。

8、函数

函数,基本和其它语言的函数一样。

函数定义的基本格式如下:

function function_name () {
    list of commands
    [ return value ]
}

有两点需要说明:

1、function 这个关键字可写可不写

2、return value 也是可写可不写,如果不写,则将函数最后一行的计算结果作为返回值。

注意:Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。如果 return 其他数据,比如一个字符串,往往会得到错误提示:“numeric argument required”。

如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数的计算结果,脚本在需要的时候访问这个变量来获得函数返回值。

看几个例子:

输出”hello,world”的简单函数例子:

带返回值的函数例子:

函数的嵌套调用:

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…

例子程序:求两个输入参数的和

以上就是一些函数的例子,基本和其它语言一样哈,比较简单哈。

像删除变量一样,删除函数也可以使用 unset 命令,不过要加上 .f 选项,如下所示:

unset .f function_name

如果你希望直接从终端调用函数,可以将函数定义在主目录下的 .profile 文件,这样每次登录后,在命令提示符后面输入函数名字就可以立即调用。

9、包含文件

像其他语言一样,Shell 也可以包含外部脚本,将外部脚本的内容合并到当前脚本。

Shell 中包含脚本可以使用:

. filename
或
source filename

两种方式的效果相同,简单起见,一般使用点号(.),但是注意点号(.)和文件名中间有一空格。

看一个例子:

1、新建两个Shell文件,分别为subFun.sh、mainFun.sh。

2、输入内容。

subFun.sh、mainFun.sh文件中的内容截图如下:

3、执行mainFun.sh。 chmod +x mainFun.sh ./mainFun.sh

注意:被包含脚本不需要有执行权限。例如:在本例中就不需要subFun.sh有执行权限

小结

跟着这个教程http://c.biancheng.net/cpp/view/2740.html,自己边看边实践就这样的过了一篇,在了解之前,不知道Shell是何方神圣,了解了之后发现,不难。基本和我们常用的Java、C/C++类似。只是有一些语法是需要我们注意的,特别是空格。以上只是把基本语法给过了一篇,在实际中还需要多写代码来练习,这样才会掌握的更好

参考资料

1、http://c.biancheng.net/cpp/view/2740.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值