【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、$* 所有参数合成一个字符串

【华为云技术分享】数据库开发:MySQL Seconds_Behind_Master简要分析

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、内存的监控效果

以上问题都是生产中会常用的一些剧本。恩,详细的内容,嘿嘿,下次再说吧。

原创文章,作者:admin,如若转载,请注明出处:https://www.2lxm.com/archives/15580.html