- Shell概述
- Shell解析器
- Shell脚本入门
一、Shell概述
定义: Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
特点: 是一个功能强大的编程语言,易编写、易调试、灵活性强。
Shell执行过程:应用程序通过向Shell解释器发送命令,由Shell解释器调用系统接口,和Linux内核进行交互,然后Linux内核通过操作硬件来执行,最后内核通过系统输出接口,将结果输出结果显示到屏幕中。可以说使用Llinux的过程,都是通过Shell来完成的。
二、Shell解析器
1、Linux提供的Shell解析器有:
[atguigu@hadoop101 ~]$cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin/bin/dash
/bin/tcshu/bin/csh
Shell解析器一般是以sh结尾的,上面表示能解析Shell脚本的一共有6种。常用的前两种。系统默认的解析器是bash解析,sh解析使用软链接指向bash。
各种不同的解析器,类似编程语言的不同版本。
三、Shell脚本入门
3.1 脚本格式
脚本以#!/bin/bash开头 (指定解析器)
脚本规范:
在shell脚本中,#后面的内容代表注释掉的内容,提供给开发者或使用者观看,系统会忽略此行注释可以单独写一行,也可以跟在命令后面
尽量保持爱写注释的习惯,便于以后回顾代码的含义,尽量使用英文、而非中文。执行脚本的方式:
- bash script.sh 或 sh scripte.sh ,文件本身没权限执行,没x权限,则使用的方法,或脚本未指定shebang ,重点推荐的方式
- 使用绝对/相对路径执行脚本,需要文件含有x权限
- source script.sh或者﹒ script.sh ,代表执行的含义,source等于点.
- 少见的用法,sh < script.sh
Shell和运维:shell脚本语言很适合处理纯文本类型数据,且Linux的哲学思想就是一切皆文件,如日志、配置文件、文本、网页文件,大多数都是纯文本类型的,因此shelI可以方便的进行文本处理,好比强大的Linux三剑客(grep、sed、awk)
注意:Shebang
计算机程序中,shebang指的是出现在文本文件的第一行前两个字符#!在Unix系统中,程序会分析shebang后面的内容,作为解释器的指令,例如
- 以#! /bin/sh 开头的文件,程序在执行的时候会调用/bin/sh ,也就是bash解释器
- 以#!/usr/bin/python开头的文件,代表指定python解释器去执行
- 以#!/usr/bin/env解释器名称,是一种在不同平台上都能正确找到解释器的办法
注意事项:
- 如果脚本未指定shebang ,脚本执行的时候,默认用当前shell去解释脚本,即 $SHELL
- 如果shebang 指定了可执行的解释器,如/bin/bash /usr/bin/python ,脚本在执行时,文件名会作为参数传递给解释器
- 如果#!指定的解释程序没有可执行权限,则会报错"bad interpreter: Permission denied”"。
- 如果#!指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前的SHELL去执行这个脚本。
- 如果#!指定的解释程序不存在,那么会报错"bad interpreter: No such file or directory”。
- #之后的解释程序,需要写其绝对路径(如:#!/bin/bash),它是不会自动到$PATH中寻找解释器的。
- 如果你使用"bash test.sh"这样的命令来执行脚本,那么#!这一行将会被忽略掉,解释器当然是用命令行中显式指定的bash。
3.2、第一个Shell脚本 Hello World
创建一个Shell脚本,输出Hello World
新建一个HelloWorld.sh文件,然后进行编辑内容:
#!/bin/bash
echo "Hello World 666"
保存退出后,然后运行
1、先使用sh或者bash命令进行执行这个脚本文件。
命令是: bash HelloWorld.sh
2、使用,/来执行这个 脚本文件,发现权限不够,执行失败。
这时候,使用chmod来修改权限为可执行,再次执行,结果成功显示。
注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本木身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。
3.3、第二个Shell脚本,多命令处理
(1) 需求:
在/home/datas目录下创建一个love.txt,在love.txt文件种增加 “i love shell”.
(2) 完成过程
创建一个名为bash.sh的脚本文件,然后进行编辑内容
脚本内容为:
#!/bin/bash
cd /home/datas
touch love.txt
echo "i love shell" >> love.txt
保存后,再执行Shell脚本: bash bash.sh
结果如图: