Shell 脚本编程入门基础

来源:互联网 发布:c语言的头文件是什么 编辑:程序博客网 时间:2024/06/05 15:45

概念

shell脚本语言就是一门简单的高级语言,它的文件名是以.sh结尾的

环境

Linux或者Ubuntu都默认安装了shell解释器

脚本解释器

  • sh:即Bourne shell,POSIX(Portable Operating System Interface)标准的shell解释器,它的二进制文件路径通常是/bin/sh,由Bell Labs开发。本文讲的是sh,如果你使用其它语言用作shell编程,请自行参考相应语言的文档
  • bash:Bash是Bourne shell的替代品,属于GNU Project,二进制文件路径通常是/bin/bash。业界通常混用bash sh 和shell

第一个shell脚本

编写

打开文本编辑器,新建一个文件,扩展名为sh,输入一些代码,第一行一般是这样:

#!/bin/bash#!/usr/bin/php

‘#!’是一个约定的标记,它告诉系统这个脚本需要用什么解释器来执行

运行

运行shell脚本有两种方法:

  1. 作为可执行程序
chmod +x test.sh./test.sh

注意,一定要写成./test.sh,而不是test.sh,运行其他二进制程序也是一样,直接写test.sh,linux系统回去PATH里寻找有木有叫test.sh的,而只有/bin, /sbin 等在path里,你当前路径通常不在path里,所以写成test.sh是会找不到的,要用./test.sh告诉系统就在当前目录下找。

2.作为解释器参数
这种方式是直接运行解释器,其参数就是shell脚本的文件名,如:

/bin/sh test.sh/bin/php test.php

这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

变量

定义变量

定义变量时,变量名不加$符号,变量名和等号之间不能有空格。

My_name='xiaoyi'

使用变量
使用一个定义好的变量,只要在变量名前面加$符号就行了

My_name="xiaoyi"echo $My_name

变量名外的花括号可加可不加,加花括号是为了帮助解释器识别变量的边界,为了规范,一般希望大家加

My_name='xiaoyi'echo ${My_name}

重定义变量
对于已经定义过的变量,可以被重新定义,如:

My_name='xiaoyi'echo ${My_name}My_name='meizhen'echo ${My_name}

注释
sh中用#进行注释,sh中没有多行注释,只能每行加一个#号

如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?每一行加个#符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。

字符串

  • 单引号:
str='hello,xiaoyi'

注意:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效,单引号字符串中不能出现单引号。

  • 双引号:
My_name='xiaoyi'str="hello ${My_name}"注意,双引号中可以有变量,双引号里可以有转义字符

字符串操作

获取字符串长度

My_name="xiaoyi"echo ${#My_name}  #输出6

查找子字符串

string="xiaoyi is cool"echo `expr index "$string" is` #这个话的意思是找出is在这个string中的位置

条件判断

if

if conditionthen         conmand1         conmand2         conmand3         ...         conmandNfi

写成一行(适用于终端命令提示符):

if `ps -ef | grep ssh`; then echo hello;fi

注意:末尾的fi就是if倒过来写的,以后还会遇到类似的

is else

if conditionthen         command1        command2        ...        commandNelse        commandfi

循环语句

for

for var in item1 item2 ... itemNdo              command1        command2        command3        ...        commandNdone

写成一行:

for var in  item1 item2 ... itemN;do command;command2... done;

while

while conditiondo         commanddone

until

until conditiondo         commanddone

选择语句

case

case "${opt}" in        "A")             command1        ;;        "B")             command2        ;;        * ) echo "Bad option, please choose again"esas

case语法和C语言差别很大,它需要一个esac作为结束标记,每个case分钟用右圆括号,用两个分号表示break.

参考资料
https://github.com/qinjx/30min_guides/blob/master/shell.md
Advanced Bash-Scripting Guide,非常详细,非常易读,大量example,既可以当入门教材,也可以当做工具书查阅
Unix Shell Programming
Linux Shell Scripting Tutorial - A Beginner’s handbook

原创粉丝点击