目录
什么是shel
Shell是一种命令行解释器,是一种提供了用户与操作系统内核进行交互的接口。它允许用户在Linux或Unix系统(包括macOS)下输入一系列命令来完成各种任务,比如文件管理、软件安装、进程监控等等
还可以理解为它是位于系统的最外层,负责人机对话:命令的翻译输入和处理结果输出
什么是shell脚本
shell脚本是一种文本文件,扩展名是.sh,它包含一系列shell命令和控制语句,还可以自动化的执行一些任务或操作,可以批量的完成各种任务,从而提高工作效率
sehll脚本能干什么
日常操作:shell脚本可以自动化完成一些要备份文件,压缩文件,清理临时文件等
系统操作:通过shell脚本来实现文件系统监控,进程的监控,系统资源的监控等
自动化文件:可以通过shell脚本来批量的创建文件,修改文件的名称,文件格式的转换等
系统安全:shell脚本还可以用来设置防火墙规则
自动化安装:通过shell脚本可以自动的安装并配置相关的文件等
shell基本规范
建议脚本存放在固定的目录里
脚本文件内容的开头必须是#!/bin/bash,来指定命令解释器
后缀名为.sh,便于我们自己识别
一些比较复杂的脚本,可以添加上注释,防止自己不理解某个任务的含义
脚本中文件必须为绝对路径
shell脚本运行的方式
./脚本名 相对路径方式运行必须有x权限
sh 脚本名
source 脚本名 以root身份运行可以没有x权限
. 脚本名
/sh/test.sh 绝对路径方式运行必须有x权限
shell变量
shell变量概述
变量是shell传递数据的一种方法,通过变量的定义和使用,shell脚本可以实现操作的灵活和可配置,也即是说用一个固定的字符串来表示不固定的值
shell变量定义的方式
自定义变量
系统环境变量
位置变量
预定义变量
自定义变量
变量名不能出现"-"符号,当变量的值有空格的时候需要用引号括起来
[root@localhost ~]# var_="hh oo"
[root@localhost ~]# var-="hh oo"
-bash: var-=hh oo: 未找到命令
然后在引用这个变量
[root@localhost ~]# echo $var_
hh oo
[root@localhost ~]# echo ${var_}
hh oo
[root@localhost ~]# unset var_
还可以查看所有的变量
[root@localhost ~]# set
还可以通过grep过滤出我们自定义的变量
[root@localhost ~]# set | grep var_
var_='hh oo'
当我们不需要这个变量了还可以取消定义
[root@localhost ~]# unset var_
引用变量,双引号和单引号的区别
[root@localhost ~]# echo "$var_ hello"
hh oo hello
[root@localhost ~]# echo '$var_ hello'
$var_ hello
[root@localhost ~]# echo "$var_ hello \$SHELL"
hh oo hello $SHELL
##双引号是引用里面的变量
##单引号是把$符号当成字符串来显示
##第三个是正常引用变量而后面那个\是把$符号转译成字符串了所以不会引用后面的变量
然后就是给命令赋予变量,比如我们要给ip地址过滤出来,首先把ip地址过滤出来然后在给这个命令赋予变量
[root@localhost ~]# ifconfig ens33 | grep "inet" | grep -v "inet6" | awk '{print $2}'
192.168.8.6
上面这个命令是把ip过滤出来,然后给命令赋予变量有两种方式
[root@localhost ~]# IP=$(ifconfig ens33 | grep "inet" | grep -v "inet6" | awk '{print $2}')
或者
[root@localhost ~]# IP=`ifconfig ens33 | grep "inet" | grep -v "inet6" | awk '{print $2}'`
这样就是把命令赋予变量了
系统环境变量
系统环境变量就是系统已经定义好的变量
export就是查看系统变量
[root@localhost ~]# export
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="ansi-1"
declare -x LANG="zh_CN.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
##下面还有很多
我们可以修改环境变量配置文件:/etc/profile
[root@localhost ~]# vim /etc/profile
# /etc/profile
MLQ=mlq
修改完成之后还需要执行一下这个配置文件才能生效
[root@localhost ~]# source /etc/profile
[root@localhost ~]# echo "$MLQ"
mlq
还有一些root用户的局部配置文件/root/.bash_profile