Shell 脚本编程入门基础

概念

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 condition
then
         conmand1
         conmand2
         conmand3
         ...
         conmandN
fi

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

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

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

is else

if condition
then 
        command1
        command2
        ...
        commandN
else
        command
fi

循环语句

for

for var in item1 item2 ... itemN
do      
        command1
        command2
        command3
        ...
        commandN
done

写成一行:

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

while

while condition
do 
        command
done

until

until condition
do
         command
done

选择语句

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值