【shell】十分钟轻松入门;如果没入门,您吐口口水再走吧!
一、什么是shell?
Shell是什么?
1、Shell 是一个程序,Linux默认是用bash。
Shell 是一个用 C 语言编写的程序,既是一种命令语言,又是一种程序设计语言,是用户使用Linux的桥梁。
Linux上的Shell有很多种类,如mac上常用zsh, ubuntu用dash,而常用的Linux上则用bash,即Bourne Again Shell(/bin/bash) , Bourne Shell(/usr/bin/sh或/bin/sh)的扩展版 。
2、shell script是使用shell的脚本。
我们通常说的 shell 是指 shell 脚本, 即shell script,是一种为 使用shell 编写的脚本程序。它的文件后缀为.sh,跟.bat、.js、.ptyhon都没有什么本质区别,无非不同环境下的可执行文件。
3、所有脚本无非是命令和流程控制的组合。
if判断条件,for、while循环,所有程序无出其右。
Shell编程能做什么?有什么优势?
1、将我们常用的命令固化,将很多步骤做的事合为一个脚本来做。
2、常用来进行我们程序部署时的启动、停止开关。
3、作为一个脚本语言,并且在Linux中有着天然的执行环境,轻量、方便。
了解shell对 开发/运维/测试 有什么好处?
1、轻松胜任部署工作;
2、熟悉Linux命令及其工作机制;
3、排查线上问题很方便;
4、扩宽解决问题的思路,拓展解决方案。
二、shell的基本语法
我将shell的基本语法分为三块:变量、运算符、条件、循环、函数。
PS.其实任何语言基本都是这几块组成。
变量
变量赋值
示例:
war_name=yao。
注意:
1、变量名和等号之间不能有空格。
2、命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
3、中间不能有空格,可以使用下划线(_)。
4、不能使用标点符号,如点“.”。
5、不能使用bash里的关键字(可用help命令查看保留关键字)。
变量使用
示例:
echo ${war_name}
echo $war_name
echo “war name is $war_name”
变量传参
1、$# 传递到脚本的参数个数
2、$1 传递到脚本的第一个参数,1为n
3、$* 所有参数合成一个字符串
4、$@ 所有参数,一个数组
5、$$ 当前脚本运行的进程号,pid
第一个示例脚本
vi 001.sh
#!/bin/sh
# author:姚毛毛的博客
echo "Shell 传递参数实例!";
echo "第一个参数为:$1";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";
输出结果:
Shell 传递参数实例!
第一个参数为:1
参数个数为:5
传递的参数作为一个字符串显示:1 2 3 4 5
运算符 & 算术命令
常用运算符
| 运算符 | 说明 |
|---|---|
| +、- 、* 、/、% | 数值: 加、减、乘、除、余 |
!、-o、-a、&& 、|| |
逻辑:非、与、或、and、or |
| ==、!=、<、<= 、> 、>= | 比较:等于、非等于、小于、小于等于、大于、大于等于 |
| =、+=、-=、*=、/=、&= | 赋值:等于、加等于、减等于、乘等于、除等于、余等于 |
~、|、&、^ |
按位比较: 按位取反、按位异或、按位与、按位或 |
| << 、 >> | 位运算: 向左移位、向右移位 |
| ++、-- | 自增、自减 |
关系运算符
关系运算符不只支持数字比较,也是支持字符比较的。
| 关系运算符 | 说明 | 示例 |
|---|---|---|
| -eq | 相等返回true,写法 [$a -eq $b] | [ $a -eq $b ] 返回 true |
| -ne | 不相等返回true | [ $a -ne $b ] 返回 true |
| -gt | 大于返回true | [ $a -gt $b ] 返回 false |
| -lt | 小于返回true | [ $a -lt $b ] 返回 true |
| -ge | 大于等于返回true | [ $a -ge $b ] 返回 false |
| -le | 小于等于返回true | [ $a -le $b ] 返回 true |
文件测试运算符
| 运算操作符与运算命令 | 说明 |
|---|---|
| -d file | 检测文件是否是目录,是则返回 true。 写法 [ -d $file ] |
| -f file | 是否是普通文件 |
| -r file | 是否可读 |
| -w file | 是否可写 |
| -x file | 是否可执行 |
| -s file | 是否为空(文件大小是否大于0) |
| -e file | 检测文件(包括目录)是否存在 |
运算操作符与运算命令
| 运算操作符与运算命令 | 说明 |
|---|---|
| [()] | 整数运算常用,效率高 |
| let | 类似于“[()]” |
| expr | 手工命令行计数器,一般用于整数值,也可用于字符串 |
| bc | 计算器 |
| $[] | 整数运算 |
| awk | shell命令神器 |
| declare | 可定义变量和属性,-i参数可定义整形变量 |
条件
if
if condition
then
command1
command2
...
commandN
fi
if else-if else
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
case
case 值 in
模式1)
command1
;;
模式2)
command1
;;
esac
循环
for
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
while
while condition
do
command
done
condition为false,则停止
until
until condition
do
command
done
condition为true则停止,一般不用
函数
function
[ function ] funname [()]
{
action;
[return int;]
}
示例
#!/bin/bash
# author:yaomaomao
demoFun(){
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----“
输出结果:
-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----
特殊符号
| 符号类型 | 常用符号 |
|---|---|
| 注释符 | # |
| 管道符 | | |
| 重定向输入输出 | <、<< ,> 、>>与 0 、1、2 |
| 匹配符 | ? 、* |
| 引号 | ’’、”” |
| 后台进程符 | & |
| 常运行命令 | nohup |
符号用法与释义
服务运行命令示例与释义:
nohup Xxx > /dev/null 2>&1 &
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null
nohup 为no hang up,不人为中断会一直运行,一般与&一起用
& 表示后台运行,终端退出则结束进程
测试一下重定向
ls 2>1
测试一下,不会报没有2文件的错误,但会输出一个空的文件1
ls xxx 2>1
没有xxx这个文件的错误输出到了1中;
ls xxx 2>&1
与&之间不能有空格,此时可以观察下结果。不会生成1这个文件了,因为错误跑到标准输出了;
ls xxx > s.log 2>&1
# 实际上写全应该是 ls xxx 1> s.log 2>&1
重定向符号>默认是1,错误和输出都传到s.log了
脚本执行
执行示例
1、相对路径
./001.sh
2、绝对路径
/root/shell/001.sh
3、不需要脚本执行权限,只需要bash权限
sh 001.sh
bash 001.sh
4、当前shell环境执行
source 001.sh 、 . 001.sh
1和2为开启子进程执行脚本,执行完毕,关闭子进程;
3、4则是在当前shell环境下执行,适合被执行程序中有对环境变量的增改,又希望保留到当前shell环境中的情况。
脚本实战
1、批量创建文件、文件夹
2、批量替换文件内容
3、查找大文件并询问删除
4、自动删除过期文件
5、持续输出磁盘、cpu、内存的监控结果
以上题目都是生产中会常用的一些脚本。恩,具体的内容,嘿嘿,下次再说吧。
【shell】十分钟轻松入门;如果没入门,您吐口口水再走吧!的更多相关文章
- 十分钟轻松让你认识ASP.NET MVC6
这篇文章说明下如何在普通编辑器下面开发mvc6应用程序. 上篇文章: 十分钟轻松让你认识ASP.NET 5(MVC6) 首先安装mvc6的nuget包: 可以看到在project.json文件中添加了 ...
- 十分钟轻松让你认识ASP.NET 5(MVC6)
ASP.NET 5差不多快发布了.自己也学习了有两个月了.今天给没有接触asp.net 5的同学写一个简单地十分钟教程,教你认识一下asp.net 5. 1.安装kvm 首先,你需要以管理员权限打开c ...
- 十分钟轻松让你认识Entity Framework 7
EF7不是在EF6上更新,而是完全重写了.它完全支持.NET Core runtime,也就是说以后你可以在Mac或者是Linux机器上使用EF了. https://github.com/nichol ...
- shell十分钟教程
1.先介绍下shell的工作原理 Shell可以被称作是脚本语言,因为它本身是不需要编译的,而是通过解释器解释之后再编译执行,和传统语言相比多了解释的过程所以效率会略差于传统的直接编译的语言. 但是s ...
- 十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less))
十分钟入门less(翻译自:Learn lESS in 10 Minutes(or less)) 注:本文为翻译文章,因翻译水平有限,难免有缺漏不足之处,可查看原文. 我们知道写css代码是非常枯燥的 ...
- 快速入门:十分钟学会Python
初试牛刀 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手册(Cheat ...
- 快速入门:十分钟学会Python(转)
初试牛刀 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手册(Cheat ...
- (十分钟视频教程)nodejs基础实战教程3:react服务端渲染入门篇
视频截图如下: (具体视频见文末) 前言: 这是小猫的第三篇node教程,本篇内容是由公众号粉丝票选得出的,相信大家对这篇教程是抱有较大希望的,这篇教程由小猫和一位多年的好朋友合作完成(笔名:谷雨,博 ...
- 转载:Python十分钟入门
Python十分钟入门:http://python.jobbole.com/23425/
随机推荐
- asp中设置session过期时间方法总结
http://www.jb51.net/article/31217.htm asp中设置session过期时间方法总结 作者: 字体:[增加 减小] 类型:转载 asp中默认session过期时间 ...
- vue-cli中的index.html ,main.js , App.vue的关系
###发现不少小伙伴才刚开始接触到这个结构都被绕的迷糊,而发现很多人说的也不是那么准确,那么下面我来说一下是怎么回事### 1.首先我们来看看原生Vue中组件的写法, 我们按照vue-cli的结构按照 ...
- 封装 private
封装表现: 1.方法就是一个最基本封装体. 2.类其实也是一个封装体. 从以上两点得出结论,封装的好处: 1.提高了代码的复用性. 2.隐藏了实现细节,还要对外提供可以访问的方式.便于调用者的使用.这 ...
- c# 优化代码的一些规则——使用is或as和强制类型转换的区别[三]
前言 使用as和强制类型转换的时候的区别是否仅仅是代码形式上的区别. 答案是肯定不是的. 正文 看两段代码: object o = Factory.GetObject(); Student stude ...
- Spark SQL源码解析(五)SparkPlan准备和执行阶段
Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 Spark SQL源码解析(二)Antlr4解析Sql并生成树 Spark SQL源码解析(三 ...
- [JavaWeb基础] 032.第三方插件pinyin4j的使用
突然发现了一个比较新奇的插件,就是可以把我们输入的汉字,输出它所有的拼音的jar包.下面以代码的形式简单的介绍下这个插件 package com.babybus.sdteam.pinyin4j; im ...
- 同步锁Lock & 生产者和消费者案例
显示锁 Lock ①在 Java 5.0 之前,协调共享对象的访问时可以使用的机 制只有 synchronized 和 volatile . Java 5.0 后增加了一些 新的机制,但并不是一种替代 ...
- Linux suid 提权
SUID (Set owner User ID up on execution) 是给予文件的一个特殊类型的文件权限.在 Linux/Unix中,当一个程序运行的时候, 程序将从登录用户处继承权限.S ...
- 循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展示和字段转义处理
在我们一般开发的系统界面里面,列表页面是一个非常重要的综合展示界面,包括有条件查询.列表展示和分页处理,以及对每项列表内容可能进行的转义处理,本篇随笔介绍基于Vue +Element基础上实现表格列表 ...
- 【朝夕专刊】RabbitMQ消息的持久化优先级
欢迎大家阅读<朝夕Net社区技术专刊> 我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为忠实读者,文末福利不要错过哦! 上篇文章介绍了R ...