Shell基础知识及Shell Script的创建、调试及应用

一、理解什么是shell

  • shell,中文名壳,保护内核。用来形象描述用户,操作系统以及硬件之间的相互关系。
  • 电脑的运行离不开硬件,但是用户却无法直接对硬件进行操作,对硬件的操作只能通过一个称为“操作系统(Operating System)”的软件来控制。事实上,我们每天所讨论的linux,严格意义上来说只是一个操作系统,我们称之为“核心(kernel)”。然而,从使用者的角度来说,使用者也没办法直接操作kernel,而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel进行沟通。这也是kernel与shell的形象命名关系。
  • 系统是多任务多用户,能一次同时处理多个任务,操作系统中的内核(一段程序)是程序调度器,来决定任务调度、优先级。
  • 内核外部加一个保护罩(shell),将其保护起来,不让外界与其直接沟通(防止第三方软件会篡改内核信息,使其优先调度等),shell将好的东西传递给内核,不好的过滤掉。

在这里插入图片描述
二、shell脚本存在的意义

  • Shell Script [1] ,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
  • 由程序与逻辑组成
    是一种解释型语言,首先开启一个解释器,再进行执行,速度慢。(c语言是描述型语言,需要编译不需要解释,速度快)是一种命令
  • shell python perl 都是解释型语言,解释器均为各自对应名称
  • 脚本中写的是系统可以运行的文本,用文本名称来运行文本的文件叫脚本,用来批量处理
  • 功能:记录系统当中的操作步骤

三、创建简单的shell脚本

 vim text.sh  #.sh规范,编写脚本
   #!/bin/bash  #幻数#!指定脚本使用的解释器。是脚本执行时最先执行的程序,写成什么脚本就用什么执行
  watch -n1 date
 sh text.sh   #执行脚本
 ps f  #查看,用哪个解释器执行就显示开启的子shell为哪个

在这里插入图片描述在这里插入图片描述

四、执行shell脚本

  sh scripts.sh #开启了一个子shell
  source scripts.sh #没开启子shell,让程序在当前环境运行,快
  . scripts     #没开启子shell,让程序在当前环境运行,快
  chmod +x scripts.sh
  ./scripts   #需加执行权限,用文件中解释器调用

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
五、调试shell脚本

  sh -x scripts.sh  适用于所有的脚本
  #脚本必须有执行权限
  chmod +x scripts.sh  #加执行权限
  scripts.sh  #直接执行脚本

在这里插入图片描述
vim /mnt/scripts.sh
在这里插入图片描述
在这里插入图片描述
六、在/etc/vimrc中添加自动脚本直接调用内容

vim /etc/vimrc

快捷键方式:

  map <F9> ms:call JB()<cr>'s

在这里插入图片描述
map 映射
F9 快捷键
0表示第一行
call JB() 调用执行JB()
测试:

 vim text.sh #刚进来为空白页面

在这里插入图片描述
按下快捷键F9:
在这里插入图片描述
文件属性方式:

  utocmd BufNewFile *.sh exec ":call JB()" #当文件状态是新的并且是以.sh结尾时,自动执行调用call JB()

在这里插入图片描述

vim text.sh

自动生成:
在这里插入图片描述
七、用脚本执行命令
1、执行ip_show.sh 显示当前主机的ip

 #!/bin/bash
 echo "host ipaddress:
     `ifconfig | awk '/inet\>/&&!/127.0.0.1/{print $2}'| sed 's/^/      /g'`" #ifconfig查看当前主及IP信息,抓取inet开头且后边没有任何字符的行,过滤掉127.0.0.1打印出第二列字符串,将抓取到的打印内容通过管道符进行sed命令行编辑,sed将全文开头替换成一个tab键的距离

在这里插入图片描述
在这里插入图片描述
2、执行user_show.sh 显示当前主机中能登陆系统的用户

 #!/bin/bash
 echo "Login user list:
     `awk -F : '/bash$/||/sh$/||/csh$/||/tcsh$/{print $1}' /etc/passwd | sed 's/^/      /g'`" #awk抓取以:作为分隔符,所有行中以系统中可用shell结尾的行对应的第一行,将抓取到的打印内容通过管道符进行sed命令行编辑,sed将全文开头替换成一个tab键的距离

在这里插入图片描述
在这里插入图片描述
3、执行host_message.sh 显示当前主机的名称,ip,以及能够登陆系统的用户

 #!/bin/bash
 echo "hostname: `hostname`"  #反向单引号是指在命令中首要执行的内容
 echo "host ipaddress:
      `ifconfig| awk '/inet\>/&&!/127.0.0.1/{print $2}' | sed 's/^/     /g'` "
 echo "Login user list:
      `awk -F : '/bash$/||/sh$/||/csh$/||/tcsh$/{print $1}' /etc/passwd | sed 's/^/     /g'`" 

在这里插入图片描述
在这里插入图片描述
4、clear_log.sh 执行命令后可以清空日志

 #!/bin/bash
 [ "$USER" = "root" ]&&{   #只有执行脚本的用户为root才可以执行&&操作
                > /var/log/messages
 }||{
                echo -e "\033[31mThis script must run with  root!!!\033[0m"
 }

#$USER指执行该脚本的用户
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值