运维精华-Shell需要牢记几点1

简介: 运维精华-Shell需要牢记几点1

目录

Bash特性

输入输出重定向

变量配置文件

声明变量:declare,typeset

      检查系统环境变量的命令:

内置shell命令

内置命令,外置命令

Shell运算符

接受键盘输入

流程控制

循环语句

特殊流程控制语句

正则表达式

字符截取替换命令

sed文档处理工具


Shell概念

shell是一个C语言编写的程序,它是用户使用Linux的桥梁。Shell即是一种命令语言,又是一种程序设计语言。

Bash特性

Shell类型:

/bin/sh

/bin/bash

/sbin/nologin

/usr/bin/sh

/usr/bin/bash

/usr/sbin/nologin

引号类型:

单引号:无视特殊字符

双引号:识别特殊符号

无引号:连续的字符可以不加引号

反引号:引用命令执行结果,等于$()用法

输入输出重定向

      设备名    文件描述符    类型

      /dev/stdin     0     标准输入

      /dev/stdout   1     标准输出

      /dev/stderr    2     标准错误输出

变量类型和加载

变量配置文件

      用户个人配置文件:~/.bash_profile,~/.bashrc远程登录用户特有文件

      全局配置文件:/etc/profile,/etc/bashrc,全局配置文件,影响所有登录系统的用户

声明变量:declare,typeset

declare -i num      #声明整数变量
declare -r readonly      #声明只读变量
declare -a arr=‘([0]=”a” [1]=”b” [2]=”c”)’   #生成数组变量

检查系统环境变量的命令:

             set:输出所有变量,包括全局变量,局部变量

             env:只显示全局变量

             declare:输出所有变量

             export:显示和设置环境变量值

      撤销环境变量

             unset 变量名,删除变量或函数

      设置只读变量

             直接readonly显示当前系统只读变量

             readonly name只读变量

     特殊变量

            $0:获取shell脚本文件名,以及脚本路径

             $n:获取shell脚本的第n个参数,n在1~9之间,参数需要空格隔开

             $#:获取执行的shell脚本后面的参数总个数

             $*:获取shell所有参数

             $@:同$*,如果加了双引号,会把所有参数为独立的字符串分开

   特殊状态变量

             $?:上次命名执行状态,0正确,其他为失败

             $$:当前shell的进程号

             $!:上一次后台进程PID

             $_:获取上一次执行的命令的最后一个参数

      特殊shell扩展变量          

${parameter:-word}     #如果parameter变量值为空,返回word字符串
${parameter:=word}     #如果parameter变量为空,则word替代变量值,且返回
${parameter:?word}     #如果parameter变为空,word当作错误输出,否则正常输出
${parameter:+word}     #如果变量为空,什么都不做,否则word返回

内置shell命令

echo命令

选项:

      -n:不换行

      -e:解析字符串中的特殊字符

             \n换行

             \回车

             \t制表符

             \b退格

printf命令

      作用:打印与echo相同

      与echo的区别:自动识别特殊字符,不自动添加换行服

eval命令

      作用:执行多个命令

      格式:eval 命令;命令;命令

exec命令

      作用: 不创建子进程,执行后续命令;并执行完毕后,自动exit退出

Shel字串的花括号用法

${变量名}:返回变量值

${#变量名}:返回变量长度,字符长度

截取:

${变量名:start}:返回变量start数值之后的字符,start是数字

${变量名:start:stop}:返回变量从start下标到stop的所有字符

删除:

${变量名#word}:从变量开头删除最短匹配的word字串

${变量名##word}:从变量开头删除最长匹配的word字串

${变量名%word}:从变量结尾删除最短的word字串

${变量名%%word}:从变量结尾删除最长匹配的word字串

替换:

${变量名/pattern/string}:用string代替第一个匹配的pattern字串

${变量名//pattern/string}:用string代替所有的pattern字串

内置命令,外置命令

内置命令:在系统启动时就载入内存,常驻内存,执行效率高,但是占用资源

外置命令:用户需要从硬盘中读取程序文件,再读入内存加载

Shell运算符

1.算数运算符

逻辑概念:真为1  假为0

shell中常见的算数运算命令

(())          用于整数运算的常用运算符,效率高

let          用于整数运算,类似(())

expr        可用于整数运算,但是还有很多其他功能

bc          计算器程序(适合整数及小数运算)

$[ ]         用于整数运算

awk        awk既可以整数运算,和小数运算

declare   定义变量值和属性,-i参数可以用于定义整形变量做运算

特殊符号符号

++:自增

--:自减

2.关系运算符

运算符       说明

-eq    检测两个数是否相等

-ne    检测两个数是否不同

-gt     检测第一个数值是否大于右边数值

-lt      检测第一个数值是否小于右边数值

-ge    检测第一个数值是否大于等于右边的数值

-le     检测第一个数值是否小于等于第二个数值

3.逻辑运算符

运算符       说明

!              非运算,取反

-o              或运算,第一个表达式为true则返回true

-a              与(并且)运算,所有表达式都为true才返回true

4.字符串运算符

运算符                说明

=                        检测两个字符是否相等

!=                    检测两个字符是否不相等

-z                       检测字符串长度是否为0

-n                       检测字符串长度是否不等于0

str                       检测字符串是否为空

5.文件测试运算符

操作符                说明

-b file         检测文件是否是块文件

-c file         检测文件是否是字符设备文件

-d file         检测文件是否是目录

-f file          检测文件是否是普通文件

-p file         检测文件是否是有名管道

-g file         检测文件是否设置了SGID位

-k file         检测文件是否设置了粘着位

-u file         检测文件是否设置了SUID位

-r file          检测文件是否可读

-w file        检测文件是否可写

-x file         检测文件是否可执行

-s file         检测文件是否为空

-e file         检测文件是否存在

接受键盘输入

read [选项] [变量名]

选项:

      -a:后面跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。

      -p:提示信息:在等待read输入时,输出提示信息

      -t:秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间

      -n:数字:read命令只接受指定的字符数,就会执行

      -s:隐藏输入的数据,适合机密信息的输入

      -d:后面跟一个标志符,其实只是其后的第一个字符有用,作为结束的标志

      -e:在输入的时候可以使用命令补全功能

变量名:

      变量名可以自定义,如果不指定变量名,会把输入保存默认变量REPLY

      如果只提供了一个变量名,则整个输入行赋予给变量

      如果提供了一个以上的变量,则输入行分为若干字,一个接一个的赋予各个变量,而命令行上的最后一个变量取得剩余的所有字

目录
相关文章
|
6月前
|
运维 Java Shell
Linux非常详细的shell运维脚本一键启动停止状态SpringBoot打成可运行jar包
Linux非常详细的shell运维脚本一键启动停止状态SpringBoot打成可运行jar包
292 0
|
1月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
53 2
|
3月前
|
运维 监控 Shell
自动化运维之宝:编写高效的Shell脚本
【8月更文挑战第31天】在运维的世界里,Shell脚本是一把瑞士军刀,它让日常任务变得简单而高效。本文将通过浅显易懂的语言和实际案例,带你领略Shell脚本的魅力,并教你如何打造属于自己的自动化工具箱。无论你是初学者还是资深运维,这篇文章都将为你打开一扇窗,让你看到不一样的风景。让我们一起探索Shell脚本的世界吧!
|
6月前
|
运维 Linux Shell
day02-Linux运维-系统介绍与环境搭建_硬件 系统核心 解释器shell 外围操作系统
day02-Linux运维-系统介绍与环境搭建_硬件 系统核心 解释器shell 外围操作系统
|
运维 Shell 测试技术
运维(23)- shell自动化部署
运维(23)- shell自动化部署
62 0
|
6月前
|
存储 运维 Shell
Shell内置命令大全,Linux运维工程师收藏!
Shell内置命令大全,Linux运维工程师收藏!
229 0
Shell内置命令大全,Linux运维工程师收藏!
|
6月前
|
运维 Linux 网络安全
利用群晖NAS+shell脚本实现运维命令执行结果文件自动上传
利用群晖NAS+shell脚本实现运维命令执行结果文件自动上传
377 0
|
机器学习/深度学习 运维 Shell
运维(22)- shell开机自启动脚本
运维(22)- shell开机自启动脚本
96 1
|
运维 Shell Linux
运维(21)- shell Linux核心命令
运维(21)- shell Linux核心命令
82 0
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4