shell脚本自学笔记
一、 什么是Shell脚本
shell脚本并不能作为正式的编程语言,因为它是在linux的shell中运行的,所以称为shell脚本。事实上,shell脚本就是一些命令的集合。
假如完成某个需求需要一口气输入10条命令,对于简单的命令,我们可以直接在shell窗口中输入,但如果是比较长且复杂的命令,一次一次敲就会显得很麻烦。我们可以把这10条命令都记录到一个文档中,然后去调用文档中的命令,这样就能一步操作完成,以后再遇到这个需求的时候也只需要调用这个文档就行了,这个文档就是shell脚本,只是这个文档有它特殊的格式。
shell脚本能帮我们很方便地管理服务器,我们可以指定一个任务计划,定时去执行某个shell脚本以满足需求。
二、shell脚本的创建和执行
下面来编写第一个脚本:
vim first.sh #写入下面内容
#!/bin/bash
## This is my first shell script.
## Writen by lzx 2018-7-27
date
echo "Hello World!"
shell脚本通常都以.sh作为后缀名,不是说不加.sh的脚本不能运行,只是大家的习惯,这样也方便辨识。
上面,第一行要以#!/bin/bash开头,表示该文件使用的是bash语法,不设置该行也可以执行,但不符合规范。
#表示注释,后面跟一些该脚本的相关注释内容,以及作者、创建日期或版本等。注释可以省略,但不建议省略,因为我们的记忆力有限,没有注释我们自己都不知道自己写的脚本是用来干什么的、是什么时候写的。建议从一开始就要养成写脚本的良好习惯,方便自己也方便他人。
下面来执行上面的脚本:
# sh first.sh #用sh命令来执行
2018年 07月 27日 星期五 09:42:54 CST
Hello World!
还有一种执行方式:
# ./first.sh #./表示当前目录
-bash: ./first.sh: 权限不够
# chmod +x first.sh #给执行权限
# ./first.sh
2018年 07月 27日 星期五 09:44:09 CST
Hello World!
使用上面方法来执行shell脚本的前提是脚本本身有执行权限,所以需要给脚本加一个x权限。
另外,使用sh命令来执行脚本时,可以加-x选项来查看脚本的执行过程:
# sh -x first.sh
+ date
2018年 07月 27日 星期五 09:49:22 CST
+ echo 'Hello World!'
Hello World!
三、命令date
# date #显示当前时间
四、Shell脚本中的变量
shell脚本中的变量可以是一个数值、一个命令或者一个路径。定义变量的格式为:变量名=变量的值,在脚本中引用变量的值时需要加上符号$。
五、数字运算
在脚本中进行数字运算,也会用到变量。
下面再自定义一个脚本:
#! /bin/bash
## For get the sum of two numbers.
## Writen by lzx 2018-7-27
a=1
b=2
sum=$(($a+$b))
echo "$a+$b=$sum"
1+2=3
数学计算要用((…))括起来,并且前面要加上符号$。
六、获取用户输入
read命令用于和用户交互,它把用户输入的字符串作为变量值,用法如下:
#!/bin/bash
## Using 'read' in shell script.
## Writen by lzx 2018-7-27
read -p "Please input a number:" x
read -p "Please input another number:" y
sum=$[$x+$y]
echo "The sum of two numbers is:$sum"
Please input a number:5
Please input another number:11
The sum of two numbers is:16
七、if语句
不带else
具体格式如下:
if 判断语句;then
command
fi
下面自定义一个脚本:
#!/bin/bash
read -p "Please input your score: " a
if ((a<60));then
echo "You didn't pass the exam."
fi
上面出现了((a<60))这样的形式,表示里面的是一个数学运算,(( ))这是shell脚本特有的格式,只用一个小括号或不用括号都会报错,要记住这个格式。
带有else
具体格式如下:
if 判断语句
then
command
else
command
fi
带有elif
具体格式如下:
if 判断语句1;then
command
elif 判断语句2;then
command
else
command
fi
判断数值大小除了可以使用((
))的形式外,还可以使用[],但不能使用>、<、=这样的符号了,要使用-lt(小于)、-gt(大于)、-le(小于或等于)、-ge(大于或等于)、-eq(等于)、-ne(不等于)。
八、和文档相关的判断
shell脚本中if还经常用于判断文档的属性,比如判断是普通文件还是目录,判断文件是否可读、写、执行权限等。
if 常用的选项有以下几个:
-e :判断文件或目录是否存在
-d :判断是不是目录以及是否存在
-f :判断是不是普通文件以及是否存在
-r :判断是否有读权限
-w :判断是否有写权限
-x :判断是否有执行权限
具体格式如下:
if [ -e filename ]
then
command
fi
示例如下:
# if [ -d /home/ ]; then echo ok; fi
ok
# if [ -f /home/ ]; then echo ok; fi
/home/是目录而非文件,所以在判断它是否为文件时并不会显示ok。
九、case逻辑判断
在shell脚本中,除了使用if来判断逻辑外,还可以使用case。
具体格式如下:
case 变量 in
value1)
command
;;
value2)
command
;;
value3)
command
;;
*)
command
;;
esac
下面自定义一个脚本:
#!/bin/bash
read -p "Input a number: " n
a=$[n%2]
case $a in
1)
echo "The number is odd." # odd:奇数
;;
0)
echo "The number is even." # even:偶数
;;
*)
echo "It's not a number!"
esac
case脚本常用于编写系统服务的启动脚本。
十、for循环
具体格式如下:
for 变量名 in 循环的条件
do
command
done
下面自定义一个脚本:
#!/bin/bash
for i in `seq 1 5`; do # seq 1 5 表示从1到5的一个序列
echo $i
done
上面,循环的条件是引用系统命令的执行结果seq 1 5,但必须用反引号括起来。
十一、while
日常运维工作中,也会经常用while循环来编写死循环的脚本,用于监控某项服务。
具体格式如下:
while 条件
do
command
done
下面自定义一个脚本:
#!/bin/bash
a=6
while [ $a -ge 1]
do
echo $a
a=$[$a-1]
done
另外,可以用一个冒号:代替循环条件,这样就可以做到死循环。
十二、exit
exit,它作用的范围更大,直接退出整个shell脚本
目前这些是我们常用的,毕竟咱不是搞运维的,更多的是用它写一写简单的脚本来存储命令。下面我将以px4安装脚本为例说明shell脚本使用:
————————————————
相关的视频学习资料
shell脚本快速入门
http://www.makeru.com.cn/live/3485_1489.html?s=45051
linux基础
http://www.makeru.com.cn/course/details/2058?s=45051
快速上手linux
http://www.makeru.com.cn/live/1758_310.html?s=45051
Linux网络经典案例
http://www.makeru.com.cn/live/3485_1630.html?s=45051
shell脚本自学笔记的更多相关文章
- shell 脚本实战笔记(10)--spark集群脚本片段念念碎
前言: 通过对spark集群脚本的研读, 对一些重要的shell脚本技巧, 做下笔记. *). 取当前脚本的目录 sbin=`dirname "$0"` sbin=`cd &quo ...
- shell脚本编写笔记
包含转载内容,转载自http://wenku.baidu.com/link?url=jtCHxEYzgGve6P64U3JRQRgU6nhpGvqFLLpWu9I2Htq6hi9TGLudRFkk7r ...
- Shell 脚本编程笔记(一) Hello Shell
最近不断在接触Linux操作系统,对它一个终端走天下的特性感到十分新奇和伟大.同时也被各种命令折磨的死去活来...公司的一个老同事给我讲,在公司的极品geek宅都是只用一个黑黑的框完成一切的.结果我一 ...
- shell脚本学习笔记(符号)
shell脚本的学习: 1.Shell的作用是解释运行用户的命令,用户输入一条命令,Shell就解释运行一条,这样的方式称为交互式(Interactive),Shell还有 一种运行命令的方式称为批处 ...
- linux shell脚本编程笔记(二): 分支结构
1.if if command then commands fi if command then commands else commands fi if command1 then command ...
- shell脚本学习笔记 (流编辑器sed)
sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用很普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出. sed不 ...
- shell脚本初学者笔记
概述 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务. Shell 脚本(shell script),是一种为 shell 编写的脚本程序. Linu ...
- shell脚本入门笔记
转载:http://mp.weixin.qq.com/s?__biz=MzA3MTIxNzkyNg==&mid=204081791&idx=1&sn=27bb1d827e0f8 ...
- Shell脚本学习笔记之(自动填充函数模板)
其实,vii 就是写的一个脚本,跟 vi 没半毛钱关系,只不过借用一下这个名字而已.那这个脚本长什么样呢?look: 下面来详细的解析上面的代码,来看第1行: #!/bin/bash 这是Shell脚 ...
随机推荐
- MySQL实战45讲(01--05)-笔记
目录 MySQL复习 01 | 基础架构:一条SQL查询语句是如何执行的? 连接器 查询缓存 分析器 优化器 执行器 02 | 日志系统:一条SQL更新语句是如何执行的? 重要的日志模块:redo l ...
- Spring Cloud Eureka 之常用配置解析
[原创内容,转载.引用请注明出处] 1. 配置项解析 1.1 通用配置 # 应用名称,将会显示在Eureka界面的应用名称列 spring.application.name=config-servic ...
- Dapr实战(一) 基础概念与环境搭建
什么是Dapr Dapr 是一个可移植的.事件驱动的运行时,可运行在云平台或边缘计算中.支持多种编程语言和开发框架. 上面是官方对Dapr的介绍.有点难以理解,大白话可以理解为:Dapr是一个运行时, ...
- http请求在https中使用
问题原因:HTTPS页面里动态的引入HTTP资源,比如引入一个js文件,会被直接block掉的.在HTTPS页面里通过AJAX的方式请求HTTP资源,也会被直接block掉的. 解决方案: <m ...
- mysql给数据库表里某个字段赋随机值
UPDATE sxz_goods set sales_volume_base = round(rand() * 50) + 1 where sales_volume_base =0 ORDER BY ...
- vivo全球商城-营销价格监控方案的探索
一.背景 现在日常官网商城的运营中有一定概率出现以下两个问题: 1)优惠信息未对齐 官网商城促销优惠的类型越来越多,能影响最终用户实付价的优惠就有抢购.满减.优惠券.代金券等.实际业务操作中存在不同促 ...
- Winform 空闲时间(鼠标键盘无操作)
前言 Winform 在特定情况下,需要判断软件空闲时间(鼠标键盘无操作),然后在做一下一些操作. 实现 做了一个简单的例子,新建一个窗体,然后拖两个控件(Timer控件和label控件) using ...
- 解决Vue项目打包之后放到nginx下刷新就报错404的问题
最近跟着某机构的教学视频敲了一遍vue项目,但是在windows环境下部署的时候就懵逼了放到nginx下正常跑没问题,但是刷新之后就报404错误 前端项目构建vue 脚手架版本 是@vue/cli 4 ...
- Chrome安装Postman以及启动的方式
Postman一个web开发人员必不可少的接口调试神器 Chrome安装Postman的方法网上很多,就不一一列举了我个人使用的方式目前常用的两种方式 方式一:下载插件安装包使用开发者模式安装 推荐一 ...
- 怒肝 Linux 学习路线,这回不难
Linux 学习路线 by 鱼皮. 原创不易,请勿抄袭,违者必究! 大家好,我是鱼皮,又花 1 周肝出了 Linux 学习资料全家桶,包括学习路线.命令手册.视频.书籍.文档.实战教程.社区.工具.大 ...