shell的概念_优势_规则_执行方式

发布时间 2023-10-09 17:31:45作者: WeChat2834
shell的概念

shell是一块包裹着系统核心的壳,处于操作系统的最外层,与用户直接对话把用户的输入解释给操作系统,然后处理操作系统的输出结果,输出到屏幕给与用户看到结果

我们登录到Linux,输入账号密码到进入Linux交互式界面,所有操作,都是交给shell解释并执行

shell的作用
  • 解释执行用户输入的命令或程序等
  • 用户输入一条命令,shell就解释一条
  • 键盘输入命令,Linux给与响应的方式,称为交互式。
什么是shell脚本

当命令或程序写在文件中,我们执行文件,读取其中的代码,这个程序文件称为shell脚本。

在shell脚本里定义多条Linux命令以及循环控制语句,然后将这些Linux命令一次性执行完毕,执行脚本文件的方式称为,非交互方式

  • windows中存在*.bat 批处理文件
  • Linux中常用*.sh脚本文件
shell脚本规则

在Linux系统中,shell脚本称为(bash shell程序) 通常用vim编辑,由Linux命令,bash shell指令,逻辑控制语句和注释信息组成。

Shebang

计算机程序中,shebang指的是出现在文本文件的第一行前两个字符#!

在Unix系统中,程序会分析shebang后面的内容,作为解释器的指令 ,例如

  • 以#!/bin/sh 开头的文件,程序在执行的时候会调用/bin/sh,也就是bash解释器
  • 以#!/usr/bin/python开头的文件,代表指定python解释器去执行
  • 以#!/usr/bin/env解释器名称,是一种在不同平台上都能正确找到解释器的方法

注意事项:

  • 如果脚本未指定shebang,脚本执行的时候,默认用当前shell去解释脚本,即$SHELL
  • 如果shebang指定了可执行的解释器,如/bin/bash/usr/python,脚本在执行时,文件名会作为参数传递给解释器
  • 如果#!指定的解释器没有可执行权限,则会报错"bad interpreter:Permission denied".
  • 如果#!指定的解释器程序不是一个可执行文件,那么指定的解释器会被忽略,转而交给当前SHELL去执行这个脚本。
  • 如果#!指定的解释器程序不存在,那么会报错"bad interpreter: No such file or directory"
  • "#"!之后的解释程序,需要些其绝对路径(如:#!/bin/bash),它是不会自动到$PATH中寻找解释器的
  • 如果你使用”bash test.sh“这样的命令来执行脚本,那么#!这一行会被忽略掉,解释器当然是用命令行中显示指定的bash

案例1

#!/bin/bashsss
#第一个shell脚本myshell.sh
echo hello my shell
###执行方式1
chmod 744  myshell.sh
####用脚本shebang 报错,提示错误解释器
./myshell.sh
###执行方式2执行成功,指定解释器
sh myshell.sh
脚本注释,脚本开发规范
  • 在shell脚本中,#后面的内容代表注释掉的内容,提供给开发者或使用者观看,系统会忽略此行
  • 注释可以单独写一行,也可以跟在命令后面
  • 尽量保持爱写注释的习惯,便于以后回顾代码的含义,尽量使用英文,而非中文
#!/bin/sh
#
#Date: 2023-08-30
#Author: Created by Mrxu
#Blog: www.cnblogs.com/xujianbing
#
echo "hello my sh!"
~                                                                               
~                                                                               
~                                                                                                            ~                                                                        
执行shell脚本的方式
  • bash script.sh 或 sh script.sh, 文件本身没有权限执行,没X权限,则使用的方法,或脚本未指定shebang,重点推荐的方式
  • 使用 绝对/相对 路径执行脚本,需求文件可执行权限
  • source script.sh 或者 . script.sh ,代表执行的含义,source 等于 点。
  • 少见的方法,sh < script
[mrxu@localhost myshell]$ HelloShell.sh
bash: HelloShell.sh: 未找到命令...
##不需要执行权限,且重点推荐
[mrxu@localhost myshell]$ bash HelloShell.sh 
helloshellwowowowowo!
[mrxu@localhost myshell]$ /home/mrxu/tmp/myshell/HelloShell.sh
bash: /home/mrxu/tmp/myshell/HelloShell.sh: 权限不够
[mrxu@localhost myshell]$ chmod 744 HelloShell.sh 
#绝对路径
[mrxu@localhost myshell]$ /home/mrxu/tmp/myshell/HelloShell.sh
helloshellwowowowowo!
##相对路径
[mrxu@localhost myshell]$ ./HelloShell.sh 
helloshellwowowowowo!
[mrxu@localhost myshell]$ source  HelloShell.sh 
helloshellwowowowowo!
[mrxu@localhost myshell]$ . HelloShell.sh 
helloshellwowowowowo!
[mrxu@localhost myshell]$ sh < HelloShell.sh 
helloshellwowowowowo!
[mrxu@localhost myshell]$ 

shell 和运维

shell脚本语言很适合处理纯文本类型数据,且Linux的哲学思想就是一切皆文件,如日志,配置文件,文本,网页文件,大多数都是纯文本类型,因此shell可以方便的进行文本处理,好比强大的Linux三剑客(grep,sed,awk)

如下关系:

shell-->基础命令

shell-->Nginx/web

shell-->python服务

shell-->Django服务

shell-->Linux系统服务

shell-->云计算服务

shell-->虚拟化服务

shell-->Zabbix 监控

shell-->定时服务

shell-->存储服务

image-20230831095608919

脚本语言

shell脚本语言属于一种弱类型语言 无需主动声明变量类型,直接定义使用

强类型语言,必须先定义变量类型,确定是数字,字符串等,之后再赋予同类型的值

Centos7系统中支持shell情况,有如下种类

root@localhost myshell]# cat /etc/shells 
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
[root@localhost myshell]# 

默认的sh解释器

root@localhost myshell]# ll /usr/bin/sh
lrwxrwxrwx. 1 root root 4 7月  20 20:45 /usr/bin/sh -> bash
[root@localhost myshell]# 
其他的脚本语言

image-20230831101252841

  • PHP是网页程序语言,专注于WEB页面开发,诸多开源产品,wordpress,discuz开源产品都是PHP开发

  • Perl语言,擅长支持强大的正则表达式,以及运维工具的开发

    Python语言,明星语言,不仅适用于脚本程序开发,也擅长web页面开发,如(系统后台,资产管理平台),爬虫程序开发,大量Linux运维工具也由python开发,甚至于游戏开发也使用

shell的优势

虽然有诸多脚本程序语言,但是对于Linux操作系统内部应用而言,shell是最好的工具,Linux底层命令都支持shell语句,以及结合三剑客(grep,set,awk)进行高级用法。

  • 擅长系统管理脚本开发,如软件的启停脚本,监控报警脚本,日志分析脚本

每个语言都有自己擅长的地方,扬长避短,达到高效运维的目的是最合适的。

#Linux默认shell
[root@localhost myshell]# echo $SHELL
/bin/bash
[root@localhost myshell]#