shell编程基础

Posted dubhlinn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程基础相关的知识,希望对你有一定的参考价值。

shell概述

1. shell编程的意义

个人理解,shell编程类似于存储过程。存储过程是完成指定功能的一组sql语句集合,而shell编程就是完成指定功能的一组linux命令的集合。例如,我们要在服务器上部署一个一个项目,通常要做如下几个操作:

  • 进入项目目录:cd /home/dubhlinn/project/demo
  • 切分支:git checkout master
  • 从远程仓库拉取最新代码:git pull
  • 打包:mvn clean install -P production
  • 部署:docker build -t ...

每次部署都要执行相同的一套流程,如果能把这些操作放在一个文件里,只需执行这个文件即可,会明显提高服务器运维管理的效率。这就是shell编程要满足的需求。

2. shell分类

linux的shell分类很多,例如

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)

其中,最常用的是bash shell,即/bin/bash。

3. shell编程的格式

可以使用vi或vim编辑器创建shell脚本文件,其扩展名并没有要求,可以使用(.sh)表示它是一个shell文件,例如hello.sh、deploy.sh等,但是使用别的扩展名或者不用扩展名也不影响其执行。shell文件的第一行一般要指定shell种类,#!用来告诉系统,这个文件使用哪个解释器。例如最常用的bash shell这样写:

#!/bin/bash
#这是单行注释
echo "hello world"
:<<!
这是多行注释
这是多行注释
这是多行注释
!
echo "byebye"

 4. shell脚本的执行方式

如果给shell脚本赋予了可执行权限,则直接写文件的路径名即可执行,可以使用绝对路径或相对路径,注意如果shell文件正好在当前目录下,相对路径要以 ./ 开头,而不能直接写文件名。如果并没有给shell脚本赋予可执行权限,则需要在文件路径名前加 sh。一般推荐第一种,即赋予用户对文件的可执行权限。例如,在当前路径(/home/dubhlinn)下有一个hello.sh的脚本,

(1) 当用户对其有可执行权限时:

./hello.sh

/home/dubhlinn/hello.sh

(2) 当用户对其无可执行权限时:

sh ./hello.sh

sh /home/dubhlinn/hello.sh

 

shell的变量

1. 变量的定义

变量名 = 变量值

#输出环境变量
echo $HOME
echo $USER

#自定义变量
A=12
B=hello
echo A=$A
echo B=$B

shell编程中变量分为两类:环境变量、自定义变量。环境变量是linux系统已经预先定义好的变量,可以直接使用;自定义变量必须先定义,再使用。定义变量的的语法很简单,但是有几点需要注意:

  • 变量名可以由数字、字母、下划线组成,但是不能以数字开头
  • 定义变量时,等号两侧不允许使用空格,这一点跟Java、JavScript等语言有区别
  • 变量名习惯用大写字母表示
  • 定义变量时不用美元符号($),使用变量时要使用美元符号($)
  • 变量被定义后,可以重新赋值,后面的值会覆盖前面

2. 声明环境变量

(1) export 变量名=变量值

(2) source 文件路径名

第一步跟自定义变量相比,只是多了一个export关键字,第二步是为了让shell文件生效。完成这两步之后,可以在其它的shelle文件或中获取刚刚声明的环境变量。而相比之下,自定义变量仅限于在一个shell文件中使用,在其他的shell文件中无法使用。

#设置环境变量
export VILLA=Spain7
export TORRES=Spain9 

需要注意的是,在一个shell文件中,自定义变量会覆盖同名的环境变量,例如

#输出环境变量
echo VILLA=$VILLA

#自定义变量
VILLA=Bacelona7

#输出,看是环境变量还是自定义变量
echo VILLA=$VILLA

第一次输出的是环境变量的值:Spain7,第二次输出的是自定义变量的值:Bacelona7。

3. 变量的撤销

unset 变量名

#撤销变量
B=hello
unset B
echo B=$B

4. 静态变量,不能被撤销

readonly 变量名=变量值

:<<!
静态变量
不能撤销
!
readonly C=5 
echo C=$C
unset C
echo C=$C

执行这个脚本会报错,因为C是静态变量,不能使用unset将其撤销。

5. 将linux命令的执行结果赋给变量

变量名=`命令`

变量名=$(命令)

#将linux命令的执行结果赋给变量,两种方式等价
A=`ls -lh`
B=$(date)
echo A=$A
echo B=$B

 

 

 

 

以上是关于shell编程基础的主要内容,如果未能解决你的问题,请参考以下文章

shell编程基础

Shell脚本编程基础

第九章shell脚本编程基础

SHELL脚本编程基础

第17篇 shell编程基础

编程语言和shell编程基础