shell脚本基础知识详解
Posted 是大姚呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本基础知识详解相关的知识,希望对你有一定的参考价值。
shell脚本基础知识
1、什么是shell
shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的shell命令就包括ls、cd、pwd等等。总结来说,shell是一个命令解释器,它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进行控制。
2、shell脚本的意义
shell脚本与Windows/Dos下的批处理相似,也就是将各类命令预先放入到一个文件中方便一次性执行,这个程序文件就叫做shell脚本。shell脚本可以记录命令执行的过程和执行逻辑,以便以后重复执行,还可以批量、定时处理主机,方便管理员进行设置或者管理。它比Windows下的批处理更强大,比用其他编程语言编写程序的效率更高。
3、如何创建shell脚本
在创建shell脚本时,通常会新建以.sh或.script结尾的文件,但shell脚本不一定要以.sh结尾,以.sh结尾只是为了拿到该文件的人能够快速识别该文件为脚本,即命名规范。创建脚本后在进一步写入命令前,我们需要写入幻数#!/bin/bash
,#!/bin/bash
可以理解为脚本文件中所有命令运行的环境。
实验步骤:
1)切换到一个空目录/mnt中,新建以.sh结尾的脚本文件,通常我们需要在进一步写入命令前写入#!/bin/bash
和脚本首部信息
2)在写脚本首部信息时,为了避免每次手动输入,可以编写vim的子配置文件~/.vimrc(只针对脚本编写者自己生效)设置自动添加脚本首部信息的函数:func为函数类型标志;endfunc为函数结束标志;call表示调用;append表示添加语句。在append添加语句中,0表示在第一行添加,所要添加的内容需要用 “ ” 引起来;当需要添加多个内容时,可以用 . 隔开,strftime表示自动识别捕捉时间并以年/月/日格式输出显示。自动添加脚本首部信息的函数编写完成后,我们在编写脚本时可以通过以下两种方式调用该函数:
方法一: map设定按键调用函数,其中’s是固定格式
此时创建脚本后按设定的按键()即可调用自动添加脚本首部信息的函数WESTOS()
方法二: autocmd设定当新建以.sh或.script结尾的文件时自动调用函数
此时新建以.sh或.script结尾的文件时会自动调用添加脚本首部信息的函数WESTOS()
4、如何执行shell脚本
实验步骤:
1)创建并编写脚本westos.sh,写入命令(cal命令表示显示当前月的日历)
2)当脚本文件无可执行权限时,可以使用以下三种方式运行脚本:
方法一: sh westos.sh
—手动在环境中开启指定解释器
方法二: . westos.sh
—直接在当前环境中运行shell中的指令不开启新的shell
方法三: source westos.sh
—直接在当前环境中运行shell中的指令不开启新的shell
3)当脚本文件有可执行权限时,可以使用以下两种方式运行脚本:
方法一: 绝对路径方式/mnt/westos.sh
方法二: ./westos.sh
(本质上和方法一相同,因为.表示的就是当前路径)
以上这两种方式都是开启脚本中指定的shell并使用此shell环境运行脚本中的指令
4)脚本有无权限时运行方式的区别:新建脚本文件linux.sh输入cat命令(执行脚本时会一直处于运行状态,便于查看实验效果)
当脚本文件无可执行权限时使用 . linux.sh
方式运行脚本,Ctrl+z打入后台,ps f
用树状结构表示进程程序间的相互关系,可以看到脚本运行时是在当前shell中直接运行cat命令,fg调回前台后Ctrl+c结束脚本运行
当脚本文件有可执行权限时使用绝对路径方式运行脚本,Ctrl+z打入后台,ps f
用树状结构表示进程程序间的相互关系,可以看到脚本运行时是在当前shell中再开了一个shell环境(#!/bin/bash指定的环境)后运行cat命令
5、如何对脚本进行调试
实验步骤:
1)创建并编写脚本westos.sh,写入命令如下
2)由于脚本中写入的cat命令格式错误,运行脚本时会一直处于运行状态,我们可以在运行脚本时使用-x 参数显示脚本运行过程,通过显示的信息来调试脚本,显示的信息中+表示运行的指令,不带+表示指令运行的结果,可以看到脚本在执行cat命令时出错
命令练习:
1)编写脚本host_messages.sh显示当前主机的名称、ip和登陆当前主机的用户
思路:使用hostname
命令可以查看显示当前主机的名称;使用ifconfig ens3
查看网卡信息后,通过管道使用awk命令截取inet关键字后没有字符的行的第二列即可得到当前主机的ip;使用$USER
、whoami
命令可以显示登陆当前主机的用户(\\t表示一个tab键,\\n表示换行,输出中有\\t、\\n时前面必须加-e参数执行动作)
2)编写脚本clear_log.sh,执行此脚本后可以清空日志
思路:首先对执行脚本的用户进行是否为超级用户的判断,如果不是超级用户则退出运行并提示以超级用户身份执行此脚本($0表示脚本本身),如果是超级用户则检测日志文件/var/log/messages是否存在,如果不存在则退出运行并提示日志文件不存在,如果存在则使用> /var/log/messages
命令清空日志并显示日志已清理
以上是关于shell脚本基础知识详解的主要内容,如果未能解决你的问题,请参考以下文章