美文网首页
linux学习shell脚本

linux学习shell脚本

作者: liwsh | 来源:发表于2018-09-07 19:03 被阅读0次

1. 什么是shell script

shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正规表示法、管线命令与数据流重导向等功能,以达到我们所想要的处理目的。
简单的说, shell script 就像是早期 DOS 年代的批处理文件 (.bat) ,最简单的功能就是将许多指令汇整写在一起, 让使用者很轻易的就能够 one touch 的方法去处理复杂的动作 (执行一个文件 "shell script" ,就能够一次执行多个指令)。 而且 shell script 更提供数组、循环、条件与逻辑判断等重要功能,让用户也可以直接以 shell 来撰写程序,而不必使用类似 C 程序语言等传统程序撰写的语法呢!
我的理解:
是一个程序,通过这个程序的语法,你可以操作linux系统上的资源。比如我们发布服务,需要设置环境变量,清理目录,上传jar包等操作。

2. 为什么要学习

2.1 自动化管理的重要依据

管理一部主机真不是件简单的事情,每天要进行的任务就有:查询登录档、追踪流量、监控用户使用主机状态、主机各项硬设备状态、 主机软件更新查询、更不要说得应付其他使用者的突然要求了。而这些工作的进行可以分为: (1)自行手动处理,或是 (2)写个简单的
程序来帮你每日『自动处理分析』这两种方式,你觉得哪种方式比较好? 当然是让系统自动工作比较好,对吧!呵呵~这就得要良好的 shell script 来帮忙的啦!

2.2 连续指令单一化

其实,对于新手而言, script 最简单的功能就是:『汇整一些在 command line 下达的连续指令,将他写入 scripts 当中,而由直接执行 scripts 来启动一连串的 command line 指令输入!』例如: 防火墙连续规则 (iptables),开机加载程序的项目 (就是在 /etc/rc.d/rc.local 里头的数据) ,等等都是相似的功能啦! 其实,说穿了,如果不考虑 program 的部分,那么 scripts 也可以想成『仅是帮我们把一大串的指令汇整在一个文件里面, 而直接执行该文件就可以执行那一串又臭又长的指令段!』就是这么简单啦!

3. script 的执行方式差异

3.1 利用直接执行的方式来执行 script

当使用直接指令下达 (不论是绝对路径/相对路径还是 ${PATH} 内),或者是利用 bash (或 sh) 来下达脚本时, 该 script 都会使用一个新的 bash 环境来执行脚本内的指令!也就是说,使用这种执行方式时, 其实 script 是在子程序的 bash 内执行的!


3.2 利用 source 来执行脚本:在父程序中执行

该 script 都会使用原来的bash 环境来执行脚本内的指令!这也是为啥你不注销系统而要让某些写入 ~/.bashrc 的设定生效时,需要使用『 source ~/.bashrc 』而不能使用『 bash ~/.bashrc 』


image.png

4. shell脚本判断语法

4.1 test命令

test -e /dmtsai && echo "exist" || echo "Not exist"
&& 左边成功右边就执行,否则就不执行
|| 左边false右边就执行,否则不执行
-e 表示档案是否存在,无论是文件还是文件夹形式。还有其他参数

4.1.1 关于某个档名的『文件类型』判断

test -e file
-e 该『档名』是否存在?
-f 该『档名』是否存在,且为文件
-d 该『档名』是否存在,且为目录

4.1.2 关于文件权限侦测

test -r file
-r 该文件是否存在且具有读取权限
-w 该文件是否存在且具有写入权限
-x 该文件是否存在且具有执行权限

4.1.3 两个文件之间的比较

test file1 -nt file2
-nt (newer than) file1文件比file2文件新
-ot (older than)file1文件比file2文件旧

4.1.4 两个整数之间的判断

test n1 -eq n2
-eq 两值相等
-ne 两值不等
-gt n1大于n2
-lt n1小于n2
-ge n1大于等于n2
-le n1小于等于n2

4.1.5 判定字符串的数据

test -z string 判断字符串是否为空,如果是,true
test -n string 判断字符串是否不为空,如果不为空,true
test str1 == str2 判断两字符串是否相等
test str1 != str2 判断两字符串不等

4.1.6 多重条件判断

test -r filename -a -x filename file同时具有r和x权限才为真
test -r filename -o -x filename file具有r或者x权限就为真

4.1.7 示例

test ! -e ${filename} && echo "The filename '${filename}' DO NOT exist" && exit 0

4.2 判断符号 [ ]

示例:
[ $HOME" == "$MAIL" ]

  1. 在中括号 [] 内的每个组件都需要有空格键来分隔;
  2. 在中括号内的变数,最好都以双引号括号起来;
  3. 在中括号内的常数,最好都以单或双引号括号起来
    示例:
    [ "${yn}" == "Y" -o "${yn}" == "y" ] && echo "OK, continue" && exit 0

4.3 脚本入参说明

我们知道命令可以带参数,比如 ls -al。al是参数。 那么脚本是否可以带参数,比如 sh ***.sh start. start是参数。答案啊可以的,那么脚本里面如何识别参数呢
假设命令为:sh home.sh param1 param2 param3
脚本里面
$0 代表脚本内容 home.sh
$1 代表第一个参数 param1
$2 代表第二个参数 param2
$# 代表参数的个数,这里是3

4.2 if 判断命令

格式如下:
多个条件判断 (if ... elif ... elif ... else) 分多种不同情况执行
if [ 条件判断式一 ]; then
当条件判断式一成立时,可以进行的指令工作内容;
elif [ 条件判断式二 ]; then
当条件判断式二成立时,可以进行的指令工作内容;
else
当条件判断式一与二均不成立时,可以进行的指令工作内容;
fi
示例:
if [ "${yn}" == "Y" ] || [ "${yn}" == "y" ]; then
echo "OK, continue"
elif [ "${yn}" == "N" ] || [ "${yn}" == "n" ]; then
echo "Oh, interrupt!"
else
echo "I don't know what your choice is"
fi

4.3 while 循环命令

while [ condition ] <==中括号内的状态就是判断式
do <==do 是循环的开始!
程序段落
done <==done 是循环的结束
示例:
while [ "${yn}" != "yes" -a "${yn}" != "YES" ]
do
read -p "Please input yes/YES to stop this program: " yn
done
echo "OK! you input the correct answer."

4.4 shell script 的追踪与 debug

sh [-nvx] scripts.sh
选项与参数:
-n :不要执行 script,仅查询语法的问题;
-v :再执行 sccript 前,先将 scripts 的内容输出到屏幕上;
-x :将使用到的 script 内容显示到屏幕上,这是很有用的参数!

相关文章

  • Shell入门笔记

    Shell脚本:Linux Shell脚本学习指南菜鸟教程 - Shell教程Linux入门 - Shell脚本是...

  • linux shell脚本攻略笔记

    LINUX SHELL脚本攻略笔记[速查] linux shell脚本攻略笔记

  • linux shell 脚本-基础知识(一)

    linux shell 脚本的编写是Linux程序员最基本也是必须学会的技能。这里主要介绍学习shell脚本的基本...

  • Linux操作系统命令汇总

    SHELL脚本学习笔记 标签(空格分隔): linux shell脚本 1. 常用命令汇总 alias 设置别名u...

  • 第十三、十四天

    学习内容:Linux shell、嵌入式Linux开发平台搭建收获: 初步掌握了shell脚本编程的各类语法以及执...

  • 17. Interview-Linux

    1 用过哪些Linux命令? 2 写过shell脚本吗?shell脚本基本格式? 3 Linux I/O读写方式 ...

  • Shell脚本学习:spark2-shell启动流程分析

    摘要:Spark,Linux,Shell 学习一下spark2-shell的启动shell脚本,分析一下spark...

  • shell脚本学习笔记

    shell 脚本是一种可以在linux系统下运行的解释性脚本,应用广泛,功能强大,以下是本人在学习shell脚本过...

  • 指令随笔

    linux 修改shell脚本的编码 在window下编写的shell脚本编码为dos,在linux环境下不能直接...

  • shell脚本

    1)什么是shell脚本 文档: http://www.runoob.com/linux/linux-shell....

网友评论

      本文标题:linux学习shell脚本

      本文链接:https://www.haomeiwen.com/subject/xeeswftx.html