Shell脚本编程

Shell脚本编程

1.什么是Shell?

Shell是一个命令解释器,它在操作系统的最外层,负载直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕并返回给用户。这种对话方式可以是交互的方式(从键盘输入命令,可以立即得到shell的回应),或非交互式(执行脚本程序)的方式。
当linux命令或语句不在命令行下执行(严格说,命令行执行的语句也是shell脚本),而是通过一个程序文件执行时,该程序就被称为shell脚本或shell程序,shell程序很类似DOS系统下的批处理程序。这些命令、变量和流程控制语句结合起来就形成了一个功能强大的shell脚本。
Shell脚本语言擅长处理纯文本类型的数据,而linux系统中几乎所有的配置文件、日志文件(如nfs、rsync、httpd、nginx、lvs等)、绝大多数启动文件纯文件。就可以利用它在Linux系统中发挥巨大的作用。
在这里插入图片描述

2.脚本语言类型

2.1Shell脚本语言的种类

在UNIX/LINUX中主要由两大类shell
1.Bourne shell(包括sh、ksh、bash)

Bourne shell (sh)
Korn shell (ksh)
Bourne Again shell (bash)
POSIX shell (sh)
  1. Cshell (包括csh、tcsh)
C shell (csh)
TENEX/TOPS C shell (tcsh)

Shell脚本语言是弱类型语言,较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。其中Bourne shell (sh)已经被bash shell取代,但是我们还是习惯称之为sh。
查看Centos7 系统SHELL情况:

[root@node6 ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

Linux系统中的主流shell是Bash,它是Bourne Again Shell的缩写,Bash是由Bourne Shell(sh)发展而来的,但Bash与sh稍有不同,它还包含了csh和ksh的特色,但大多数脚本可以不加修改地在sh上运行。

3.Shell脚本的建立和执行

3.1 shell脚本的建立

在Linux系统中,shell脚本(bash shell程序)通常是在编辑器(vi/vim)中编写,由Unix/Linux命令、bash shell命令、程序结构控制语句和注释等内容组成。
vi = 记事本
vim =编辑器emeditor、editplus notepad++

我们可以制作一个vi=vim的别名
[root@node6 ~]# alias vi='vim'
[root@node6 ~]# vim /etc/profile
export alias 'vi=vim'
[root@node6 ~]# . /etc/profile

3.2 脚本开头(第一行)

一个规范的shell脚本在脚本第一行会指出由那个程序(解释器)来执行脚本中的内容,这一行内容在linux bash编程中一般为:

#!/bin/bash
or
#!/bin/sh <==255字符以内

其中开头的"#!“字符又称为幻数,在执行bash脚本的时候,内核会根据”#!"后的解释器来确定该用那个程序解释这个脚本中的内容。
  注意:这一行必须在每个脚本顶端的第一行,如果不是第一行则为脚本注释行。

[root@node6 tmp]# cat 1.sh
#!/bin/bash
echo "123"
#!/bin/sh <==代表注释
echo "456"

3.3脚本注释

在shell脚本中,跟在(#)井号后面的内容表示注释,用来对脚本进行注释说明,注释部分不会被当做程序执行,仅仅给用户看,系统解析器是看不到,更不会执行。
特别提示:注释尽量不使用中文

3.4 Shell脚本的执行

当shell脚本运行时,它会先查找系统环境变量ENV,改变量指定了环境文件,然后从该环境变量文件开始执行脚本,当读取了ENV的文件后,shell才会开始执行shell脚本中的内容

特殊技巧:设置crond任务时,最好把系统环境变量在定时脚本中重新定义,否则,一些系统环境变量不会被夹在。

Shell 脚本的执行通常可以采用以下几种方式:

1.bash script-name或sh script-name(推荐使用)
2.path/script-name或./script-name(当前路径下执行脚本)
###<==此项需要脚本有执行权限
3.source script-name 或. script-name #<==注意"."点号和后面字符之间有空格。
4.sh <script-name 或 cat script-name|sh(同样适合bash)

全路径执行如果不加命令全路径会没有权限

/server/scripts/abc.sh 权限不够
/bin/sh /server/scripts/abc.sh 可以执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值