在日常的工作环境中,往往会有大批量、重复性的信息或者数据需要处理。身为管理员如果不会大批量处理这类数据有时会非常麻烦,而且容易出错。所以这时候就需要Shell脚本来批量处理这些数据、并自动化完成指定好的任务。
Shell在计算机当中其实是作为翻译官将人类的语言转化为计算机做能识别的二进制语言见,图1.1。我们将命令按顺序保存在一个执行文件中,我们也可以认为写脚本命令作为记流水账一样,因为计算机是按照写好的命令顺序来执行的。
图1.1
执行shell脚本的方法有四种,其中方法一:
./脚本的路径(绝对路径或相对路径)。 再用此方法的时候要确保要执行的脚本文件有执行权限,见图1.2 。没有执行权限的脚本不是绿色的,有执行权限的脚本是绿色的。一般的要想使用此种方法执行脚本应该提前确保有执行权限,chmod +x 脚本名称。
图1.2
方法二: sh /脚本的路径(绝对路径或相对路径)。 此种方法无需脚本文件有执行权限。
方法三:source /脚本的路径(绝对路径或相对路径)。 此方法依旧无需脚本有执行权限。
方法四: . /脚本的路径(绝对路径或相对路径)。此方法依旧无需脚本有执行权限。
总结:以上四种方法除了**./**以外都无需执行文件有可执行权限。见图1.3
图1.3 无执行权限的脚本无法执行
若一条语句的开头是**#** 那么这句语句不会出现脚本的运算中,即为注释信息。
除了以上内容,构成脚本最为关键的内容就是可执行的语句也就是命令,计算机会按照用户所写好的命令一个一个执行。见图2.3
图2.3 脚本的执行顺序
变量有四大类型分别是:自定义变量、环境变量、位置变量与预定义变量。
1.自定义变量,是一种有用户自己定义的变量,用户为其定义好一个之后这个值就会存储在计算机的内存中,如果用户再次给同一变量赋值那么变量的值就会改变。见图3.1.1注意!用户定义的变量要以字母或者下划线“_”为开头否则不是变量。声明变量时需要使用**$**符号。
图3.1.1 自定义变量
2.环境变量,是计算机系统内部设置好的变量,如PATH图3.1.2。一般的环境变量名称不能改变但是其内容是可以更改的。
图3.1.2 环境系统变量
3.位置环境变量,是一种给脚本传递的参数。只有在脚本名字后面输入才有效,在脚本里*位置环境变量用 n 表 示 , n 代 表 : 1 9 数 字 ∗ ∗ , 表 示 在 脚 本 后 面 的 位 置 为 第 几 个 。 见 图 3.1.3 ∗ ∗ 补 充 : n表示,n代表:1~9数字**,表示在脚本后面的位置为第几个。见图3.1.3**补充: n表示,n代表:1 9数字∗∗,表示在脚本后面的位置为第几个。见图3.1.3∗∗补充:# 、$?、 $ 、分别代表位置环境变量的个数、执行是否成功和所有位置环境变量的内容。
图3.1.3 位置环境变量
4.预定义变量,是系统为用户预先设定好的一种变量,用户无法更改或者赋值给这些变量。就如上文中的**KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲、?、$* ** 等等。
下面主要介绍一些在脚本中常用的命令和符号的使用方法。
1.echo :为输出语句,echo " 内容 ",在控制台上显示引号里的内容。图4.1
图4.1 echo命令
2.重定向符号,一般是将脚本执行后的数据指定到某个文件中。主要的从定向符号见图4.2
图4.2 从定向符号
3.管道符号,"|“一般是将符号左边命令所执行的结果交给右边命令继续处理。形式:命令1 | 命令2 | … 。见图4.3
图4.3 管道符号
4.引用符号,双引号” ",单引号**’ '**,反撇号 `` 。双引号:允许使用一些特殊的符号,如$。单引号:使内部特殊符号无效。反撇号:内部输入的是命令。见图4.4
图4.4 引用符号
结果
5.read -p :从键盘上输入内容为变量赋值。read命令后面输入一段话引导使用者输入相应的内容为变量赋值。见图4.5
图4.5
界面样子
6.expr运算,一般可以计算:加减乘除和取余。其相应的符号为:+、-、\ *、/ 、% 。其使用方法为:加法:expr a + b 。减法:expr a - b 。乘法: expr a *\ b 。 除法: expr a / b 。 取余:expr a % b 。
本小节主要介绍了Shell脚本的工作环境,脚本的基本格式、变量的类型以及用法和一些基础指令。Shell脚本是自动化工作的重中之重,学号Shell脚本至关重要。所以,上文中提到的符号以及命令是一些最常用的我还会在以后持续更新Shell脚本的内容。
ps:我还会持续改进博客内容,把最好的干货献给大家!这里分享一个计算器脚本给大家。
#!/bin/bash
echo “这是计算器!!!请输入两个数字。”
read -p “请输入第一个数字:” shuzi1
read -p “请输入算法,加法,减法,除法,乘法,取余:” suanfa
read -p “请输入第二个数字” shuzi2
if [ $suanfa = “减法” ]
then
jieguo=expr $shuzi1 - $shuzi2
echo “结果为:$jieguo”
elif [ $suanfa = “加法” ]
then
jieguo=expr $shuzi1 + $shuzi2
echo “结果为:$jieguo”
elif [ $suanfa = “乘法” ]
then
jieguo=expr $shuzi1 \* $shuzi2
echo “结果为:$jieguo”
elif [ $suanfa = “除法” ]
then
jieguo=expr $shuzi1 / $shuzi2
echo “结果为:$jieguo”
elif [ $suanfa = “取余” ]
then
jieguo=expr $shuzi1 % $shuzi2
echo “结果为:$jieguo”
fi
echo “谢谢使用!”