首页 > 系统相关 > 认识Shell脚本(Ubuntu)

认识Shell脚本(Ubuntu)

时间:2023-09-07 17:31:48浏览次数:46  
标签:脚本 文件 解释器 Shell sh Ubuntu 执行

一:概述

  系统管理员在管理主机时需要手动处理所有的工作,Shell脚本就可以让系统自动工作,Shell脚本不需要编译,可以直接执行,功能非常强大,可以帮助我们自动处理很多的工作,简化日常化管理。

二:初步了解Shell脚本

  在Linux的内部,很多的服务都是基于以Shell脚本(Shell Script)的形式提供的。这个Shell脚本字面上理解就是针对Shell编写的一种脚本,其实就相当于一个程序。这个程序是用Shell的语法和命令编写的,可以帮助我们更好的管理主机。Shell脚本擅长处理纯文本类型的数据,Linux系统中的大部分配置文件和启动文件都是纯文本类型文件,所以Shell脚本在Linux中具有举足轻重的作用。

三:Shell脚本初识演示

  在编译Shell脚本时,建议使用Vim,因为Vim可以帮助我们自动检查语法。下面以最简单的Shell脚本输出”Hello World“演示如下图所示:

  步骤: 首先在终端输入vim hello.sh建立一个hello.sh的脚本文件,三行内容是脚本中的内容:


                认识Shell脚本(Ubuntu)_vim

                认识Shell脚本(Ubuntu)_vim_02

    这个脚本文件最好保存在用户的家目录中,比如/home/chase/桌面.正确的输入这三行内容之后,保存文件并且退出vim,回到终端之后指定bash hello.sh就可以看到输出的Hello World了。

  上面脚本里面写的三行内容代表含义如下所示:

  1.  第一行#!/bin/bash表示声明这个脚本使用的Shell是bash。这一行内容必须要书写,而且需要放到整个脚本文件的开头。必须以#!的固定格式输入,这一行称shebang,
  2. 第二行以#开头,这是整个文件的注释内容,不会被执行。注释内容主要是用来说明这个Shell脚本的内容和功能等信息。
  3. 第三行内容就是整个脚本的程序内容。echo可以输出引号里面的内容。

 bash是执行脚本文件的其中一种方式,

Shell脚本的特征:

解释性语言:解释器解释并执行脚本,不需要编译,可以直接运行。(脚本文件第一行定义的就是解释器)

批处理能力:可以在Shell脚本中编写一系列的命令并且执行。

用作编程语言:Shell脚本具有自动义变量和数组之类的编程语言功能,可以高效的描述处理过程。

四:脚本第一行写的解释器

  任何一门语言只要提供了解释器,就可以进行脚本编程。常见的解释型语言都可以用作脚本编程,比如Perl、Python、PHP等等。常见的几种编译器如下表所示:

解释器

说明

#!/bin/sh

Bourne Shell,是UNIX最初使用的Shell

#!/bin/bash

Bash (Bourne Again Shell),是Bourne Shell的扩展

#!/usr/bin/perl

Perl语言的解释器

#!/usr/bin/python

Python语言的解释器

    注意:因为系统会从上打下的、从左到右地分析和执行脚本里面的内容。在执行脚本的时候,内核会根据#!后的解释器确定执行脚本内容的程序。所以解释器必须写在脚本内容的第一行。

五:运行Shell脚本的方式

  Shell脚本的执行方法有多种,常用的有四种,其中也包括bash这种执行方式,如下表所示:

执行方式

说明

bash shellscript.sh

bash命令以解释器的形式在子Shell启动并执行脚本,脚本文件不需要执行(x)权限

./shellscript.sh

在当前的Shell(父Shell)中开启子Shell环境,脚本文件需要执行权限

.shellscript.sh

在当前Shell环境中执行脚本,脚本文件不需要执行权限

source shellscript.sh

在当前Shell环境中执行脚本,脚本文件不需要执行权限

 注意:在执行脚本文件之前,还需要实现设置好脚本文件的执行权限才行。使用.source的方式是在当前的Shell环境中执行脚本文件的,bash和./这两种方式是在当前Shell中开启一个子Shell环境、是在子Shell环境中执行脚本文件的。

   下面对于上面的表格实际操作演示一下,截图如下:

 可以使用各种文本编辑器来编写Shell脚本,比如之前使用的vi和vim。下面以一个测试脚本,可以输出三行内容,

 

                认识Shell脚本(Ubuntu)_Shell_03

                认识Shell脚本(Ubuntu)_Shell_04

   第二种方式,直接使用./的方式执行会提示你的权限不够。这样就需要赋予执行权限了,用chmod这个命令给test.sh脚本文件执行(x)权限,然后再用这种方式执行脚本文件就可以了,如下图所示:

                认识Shell脚本(Ubuntu)_vim_05

   后面两种执行方式调用子进程时可以直接在当前进程时可以直接在当前进程中运行并且把结果显示在当前进程中,使用.test.sh方式执行脚本文件时,注意,(半角句号)和脚本文件之间有一个空格,

                认识Shell脚本(Ubuntu)_Shell_06

    注意:创建文件时,最好使用.sh作为脚本文件的后缀名,一般情况下以.sh结尾的文件就表示Shell脚本文件。

六:执行脚本文件时的指定选项

  使用bash命令读取和执行脚本时,就可以指定选项。这些选项可以有效地设置加载或调式脚本文件,,如下表所示:

选项

说明

-n

检查脚本文件中地语法错误

-e

脚本内容出现错误时,返回错误并且停止运行脚本文件

-x

Shell脚本中的内容会逐步显示在命令行,错误也会显示

  如果在脚本文件中输入错误的命令,执行后会提示以下截图的错误内容:

  

                认识Shell脚本(Ubuntu)_bash_07

                认识Shell脚本(Ubuntu)_Shell_08

   第4行的dssdd出现了一个错误的命令。

    上面是不带任何选项的脚本文件的情况,可以看到执行错误的命令dssdd时会出现“未找到命令的提示信息”。脚本文件里的pwd命令显示当前的工作目录,这个命令也可以正常显示/home/,脚本会一直执行到命令结束。

 执行脚本文件时指定-e选项,如下图所示:

                认识Shell脚本(Ubuntu)_vim_09

执行脚本文件执行到错误命令dssdd时会返回错误的的信息然后停止运行脚本文件。

    如果你想同步显示脚本内容和执行结果,可以指定-x选项。这样可以看到具体的出错位置和执行结果,脚本中的内容会以+的形式显示出来,如下图所示:

                认识Shell脚本(Ubuntu)_bash_10

  七:Shell脚本中的特殊变量和参数

    Shell脚本提供了一些重要的特殊变量来存储参数信息,他在接收命令行参数时,是根据参数的位置顺序来接收的。下面是一些可以在脚本文件中使用的有特殊变量,如下表所示:

特殊变量

说明

$0

当前的Shell脚本文件名

$n

获取当前执行Shell脚本的第n个参数

$#

获取当前执行Shell脚本接收脚本参数的数量

$@

将每个变量用双引号括起来没每个变量都是独立的

$*

将所有的非$0参数存储为单个字符串

$?

退出状态。0表示成功,非0表示失败

$$

获取脚本运行的进程的进程号

  下面写一个脚本文件,来演示这些特殊的变量:

                认识Shell脚本(Ubuntu)_Shell_11

   执行这个脚本文件时,在后面指定两个参数,分别为CentOS和Ubuntu。执行结果如下图所示:

                认识Shell脚本(Ubuntu)_vim_12

  第一个参数CentOS对应$1,第二个参数Ubuntu对用$2,$0对用的是脚本文件test2.sh,脚本运行的进程号对应5368对应的是$$,最后一个输出所有参数对应的是$*。

   $?代表的是退出状态,0表示成功.






标签:脚本,文件,解释器,Shell,sh,Ubuntu,执行
From: https://blog.51cto.com/u_15912723/7399183

相关文章

  • 如何修改Ubuntu的时间与时间同步
    1、安装ntpdate,同步标准时间zce@ubuntu:~$sudoaptinstallntpdate   输入管理员密码确认安装zce@ubuntu:~$sudoaptinstallntpdate[sudo]zce的密码:正在读取软件包列表...完成正在分析软件包的依赖关系树正在读取状态信息...完成ntpdate......
  • RK3568开发笔记(七):在宿主机ubuntu上搭建Qt交叉编译开发环境,编译一个Demo,目标板运行Demo
    前言  在之前的博文中已经搭建好了一个比较完善的ubuntu宿主机,都很完善了但是发现没有Qt交叉编译开发环境,所以还需要搭建一套Qt交叉编译开发环境。<br>补充说明  本篇是基于《RK3568开发笔记(三):RK3568虚拟机基础环境搭建之更新源、安装网络工具、串口调试、网络连接、文件传......
  • ubuntu(linux):安装node(v18.17.1)
     一,访问官网https://nodejs.org/en得到下载包地址:二,下载/解压下载:root@lhdpc:/usr/local/source/node#wgethttps://nodejs.org/dist/v18.17.1/node-v18.17.1-linux-x64.tar.xz解压:root@lhdpc:/usr/local/source/node#xz-dnode-v18.17.1-linux-x64.tar.xzro......
  • RK3568开发笔记(七):在宿主机ubuntu上搭建Qt交叉编译开发环境,编译一个Demo,目标板运行Demo
    前言  在之前的博文中已经搭建好了一个比较完善的ubuntu宿主机,都很完善了但是发现没有Qt交叉编译开发环境,所以还需要搭建一套Qt交叉编译开发环境。 补充说明  本篇是基于《RK3568开发笔记(三):RK3568虚拟机基础环境搭建之更新源、安装网络工具、串口调试、网络连接、......
  • springboot项目自动运行脚本
    注意文件格式unix格式(Windowscrlf换行符有不可见字符)#!/bin/sh#服务名(要与配置文件中的server名保持一致)APP_NAME=""#git本地仓库路径GIT_RESPOSITORY=""#配置文件存储位置PROFILE_LOCATION=""#配置文件名PROFILE_NAME=""#日志文件存储位置LOG_LOCATION="......
  • ubuntu 20.04 无法同步时间
    一般时间无法同步可能有以下几种原因:1.本地防火墙a.操作系统防火墙b.云服务器就要查看安全组c.idc机房防火墙如果a没有问题,就要问下机房是否屏蔽udp123端口因为此协议容易被黑客利用攻击所以很多机房都会屏蔽 2.时间同步服务器有问题可以使用ntpdate-u或......
  • Warning: apt-key is deprecated(Ubuntu)
    在Ubuntu系统添加key到trusted数据库,会提示“apt-keyisdeprecated”Warning:apt-keyisdeprecated.Managekeyringfilesintrusted.gpg.dinstead(seeapt-key(8)).这个提示意思是:不赞成使用apt-key 这个程序,推荐使用trusted.gpg.d观看秘钥,也就是我们应该把秘钥......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • shell中实现DNA序列一致性计算
     001、[root@pc1test02]#lsa.txttest.sh[root@pc1test02]#cata.txt##测试数据ATCCAGCTGGGCAACTATGGATCTAAGCAACCTTGGAACTATGCCATTATGGCACT[root@pc1test02]#cattest.sh##测试脚本#!/bin/bashforiin$(seq$(awk'NR==1{pr......
  • 设置ubuntu支持中文
    打开终端。运行以下命令以编辑系统的语言环境设置文件: sudonano/etc/default/locale在打开的文件中,确保以下行存在并被正确设置: LANG="zh_CN.UTF-8"LC_ALL="zh_CN.UTF-8"如果上述行不存在,请添加它们。保存文件并退出编辑器。按Ctrl+X,然后按Y键确......