【Linux学习笔记29】shell脚本基础

1. 什么是shell


Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell


Shell 脚本(shell script),是一种为 shell 编写的脚本程序


2. shell脚本的意义


  1. 纪录命令执行的过程和执行逻辑,以便以后重复执行
  2. 脚本可以批量处理主机
  3. 脚本可以定时处理主机

3. 创建shell脚本


#!:是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

#!/bin/bash:幻数(此脚本用/bin/bash来解释执行)


自动添加脚本首部vim ~/.vimrc

autocmd FileType yaml setlocal ai ts=2 sw=2 et
autocmd FileType sh set ai ts=4
autocmd BufNewFile *.sh,*.script call WESTOS()
"map <F4> ms:call WESTOS()<cr>'s

func WESTOS()
		call append(0,"###########################")
		call append(1,"##	Author:	zy")
		call append(2,"##	Version:")
		call append(3,"##	Create_Time:	".strftime("%Y/%m/%d"))
		call append(4,"##	Mail:	[email protected]")
		call append(5,"##	Info:	")
		call append(6,"###########################")
		call append(7,"")
		call append(8,"#!/bin/bash")
endfunc

测试:新建一个文件 test.sh,扩展名为 sh(sh代表shell),自动生成首部

在这里插入图片描述



4. 运行shell脚本


运行方法1:

  1. 手动在环境中开启指定解释器
  2. sh 脚本文件:运行

在这里插入图片描述

运行方法2:

直接在当前环境中运行shell中的指令(不开启新的shell)

source 脚本文件

. 脚本文件

在这里插入图片描述


运行方法3:


开启脚本中指定的shell并使用此shell环境运行脚本中的指令

不需要在第一行指定解释器信息

  1. chmod +x 脚本文件名:给予执行权限

  2. /脚本文件名. /脚本文件名:执行

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



5. 调试shell脚本


sh 命令
-c string
命令从-c后的字符串读取
-i
实现脚本交互
-n
进行shell脚本的语法检查
-x
实现shell脚本逐条语句的跟踪

sh -x 脚本文件:显示脚本执行过程

+	#运行指令
不带+	#命令运行的输出

在这里插入图片描述



6. 脚本练习


练习一:
运行 ‘ip_show.sh 网卡’ ,显示当前IP


ifconfig $1 | awk '/inet\>/{print $2}'

在这里插入图片描述


练习二:
host_messages.sh

  1. 显示当前主机名称,ip登陆当前主机的用
  2. 格式:
    hostname: XXXX
    ipaddress: XXXX.XXXX.XXXX.XXXX
    username: root

echo "hostname:	$HOSTNAME"
echo "ipaddress:	$(ifconfig 网卡 | awk '/inet\>/{print $2}')"
echo "username:	$USER"

在这里插入图片描述

练习三:
clear_log.sh
执行此脚本后可以清空日志


#检测是否是root用户执行此脚本
[ "$USER" = "root" ] || {
    
    
	echo -e "\033[31m Error: Please run script with root ! \033[0m"
	exit 1
	}
#清空日志
LOGS=`sed -n '/RULES/,$p' /etc/rsyslog.conf | awk '!/^#|^$/&&/var/{print $2}' | sed 's/-//g'`

for LOG in $LOGS
do
	> $LOG && echo -e "\033[32m $LOG is cleared ! \033[0m"
done

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46069582/article/details/111543159
今日推荐