shell脚本基础

这篇具有很好参考价值的文章主要介绍了shell脚本基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、概述

(一)、shell脚本基础概念

(二)、shell的类型

二、Shell变量

(一)、组成

1.变量名

2.变量值

(二)、类型

1.系统内置变量(环境变量)

2.自定义变量

3.预定义变量

 4.位置变量

5.作用域      

6.shell中的字符串      

三、运算符

(一)、数学运算

(二)、比较运算     

1.数值比较

2.文件比较

3.字符串比较

4.逻辑运算符

5.条件测试

四、shell脚本

(一)、shell脚本编写规范        

(二)、shell运行规则

(三)、shell脚本运行追踪

五、shell语句

(一)、条件语句

(二)、循环语句

(三)、开关语句

六、文件操作四剑客

(一)、正则表达式

1.基础正则

2.扩展正则

​3.常见正则表达式 (了解)

(二)、grep进阶

 (三)、sed

 (四)、awk

总结



前言

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

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Shell属于内置的脚本,程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)语法简单,代码写起来比较轻松,简单易学。

一、概述

(一)、shell脚本基础概念

脚本就是将手动一次性执行的命令进行规范且自动化

(二)、shell的类型

shell         命令解释环境

类型有
    sh
    ash
    bsh
    csh
    bash
    tcsh
    dsh
    zsh

在Linux系统中

文件名.sh             .sh是linux下bash shell 的默认后缀

查看系统中支持的shell
    cat /etc/shells

查看系统默认shell
    echo $SHELL

shell脚本基础,linux,运维,服务器

二、Shell变量

(一)、组成

1.变量名

不会变化

声明规范
    不能是数字或数字开头
    以_或字母开头
    变量名中不能包含特殊字符

shell脚本基础,linux,运维,服务器

声明方法
    驼峰式                userName
        
    双驼峰                UserName
        
    shell写法
        user_name
        username
        USERNAME

2.变量值

        不断变化

        数字、字符

(二)、类型

1.系统内置变量(环境变量)

这种变量中主要保存的是和系统操作环境相关的数据,一般对系统起作用的环境变量的变量名是系统预先设定好的。

env可在/etc/profile文件中修改
 shell脚本基础,linux,运维,服务器  

shell脚本基础,linux,运维,服务器

查看环境变量

echo $PATH

显示当前环境变量的值

echo $LANG

shell脚本基础,linux,运维,服务器

 表示系统的默认语言环境为美式英语(English, United States)并使用UTF-8编码

查看当前的区域设置

locale

shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器

查看远程连接

echo  $SSH_CONNECTION

shell脚本基础,linux,运维,服务器

2.自定义变量

这种变量是最常见的变量,由用户自由定义变量名和变量的值。

varName=varValue

等号两边不能有空格

字符串
    shell中可以不使用引号
    当包含有空格时,需要使用引号

引号的用法

不会引用变量值 单引号        '
会应用变量值 双引号        "
引用命令结果 反撇号        `
$(命令) 应用场景较多

3.预定义变量

是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

$0 脚本本身的名称
$# 脚本后参数的个数
$* 脚本运行时参数的内容(整体输出)
$@ 脚本运行时参数的内容(逐个输出)
$? 脚本运行完毕后的返回值
默认情况 0          成功
非0      失败

  shell脚本基础,linux,运维,服务器shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器

 一般情况下失败为1,特殊的失败
shell脚本基础,linux,运维,服务器


 4.位置变量

这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。

    脚本后参数所在的位置
    $1
    ...
    $9       
    
 

5.作用域      

输出        echo $varName

默认变量只在当前shell下生效

若要在当前及其子shell下生效,需要声明为全局变量(export

shell脚本基础,linux,运维,服务器
  
shell脚本基础,linux,运维,服务器        
  
  6.shell中的字符串      

string
 1)获得字符串的长度         

语法:    ${#StringName}

shell脚本基础,linux,运维,服务器

2)字符串取子串        
语法:    ${#StringName:position:lenght}      

注意:lenght没有定义时,一直取到字符串的结尾!  

shell脚本基础,linux,运维,服务器

3)字符串的截取          
a.从左至右截取最后一个匹配字符串string之后的所有字符串                
语法:    ${StringName##*string}    

b.从左至右截取第一个匹配字符串string之后的所有字符串
语法:    ${StringName#*string}

c.从右至左截取最后一个匹配字符串string之后的所有字符串
语法:    ${StringName%%string*}    

d.从右至左截取第一个匹配字符串string之后的所有字符串
语法: ${StringName%string*}

shell脚本基础,linux,运维,服务器

4)字符串的拼接
语法:    StringName3=${StingName1}${StringName2}

shell脚本基础,linux,运维,服务器

5)字符串替换:
语法:    ${StringName/OldString/NewString}

shell脚本基础,linux,运维,服务器

三、运算符

(一)、数学运算

+ - * / %    * 作为乘号时需要加转义符为\*
运算方法
 expr expr $a + $b
$((a+b)) echo $((a+b))
$[a+b] echo $[a+b] 
注意 shell不支持浮点数的显示
\r 回车符
\d 垂直制表符
\v 水平制表符

  shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器

(二)、比较运算     

1.数值比较

-eq 等于
-ne    不等于
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于

用test测试

shell脚本基础,linux,运维,服务器

2.文件比较

-e 文件或目录是否存在
-f 是否为文件
-d 是否为目录
-r 判断文件是否可读
-w 判断文件是否可写
-x 判断文件是否可执行

shell脚本基础,linux,运维,服务器

 shell脚本基础,linux,运维,服务器

3.字符串比较

= 字符串一致
!= 字符串不一致
-z 字符串为空
!     -z 字符串不为空

shell脚本基础,linux,运维,服务器

4.逻辑运算符

&& 有假则假,全真为真
|| 有真则真,全假为假
! 取反 有真则假,有假则真
-a 并且
-o 或者

shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器  shell脚本基础,linux,运维,服务器

5.条件测试

&& [ $a -ne $b ] &&  echo OK 条件 && 输出结果
条件为真输出
|| [ $a -ne $b ] ||  echo OK 条件 || 输出结果
条件为假输出

四、shell脚本

(一)、shell脚本编写规范         

第一行 #!/bin/bash
第二行 #脚本的说明
第三行  脚本正文

(二)、shell运行规则

没有x权限 bash  脚本所在路径/脚本文件
source 脚本所在路径/脚本文件
.(点)脚本所在路径/脚本文件
有x权限 .(点)/脚本文件
脚本绝对路径/脚本文件

shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器不打断会一直查看 

(三)、shell脚本运行追踪

shell脚本运行追踪bash -x 脚本所在路径/脚本文件
    
$[$RANDOM%100]返回100内随机数
    
seq 1 10返回1到10 的连续数字
    
{1..10}返回1到10 的连续数字
    
seq 1.1 10.1返回1.1 2.1 3.1.... 10.1

shell脚本基础,linux,运维,服务器
    shell脚本基础,linux,运维,服务器
read -p "提示语" 变量名读取键盘输入并赋值给变量名
 shell脚本基础,linux,运维,服务器


shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器

五、shell语句

(一)、条件语句


    单分支if
        if [ ];then
fi
    双分支if
        if [ ];then
            else
        fi
    多分支if
        if [ ];then
           elif [ ];then
           else

             fi
        fi

(二)、循环语句

for

for 条件(i in 值)|((i=1;i<=10;i++))
do
    语句
done

while

i=1
while 条件
do
    语句
    let  i++(递增)
done

(三)、开关语句

case

case $1 in
条件1)
    语句
;;
条件2)
    语句
;;
*)
    帮助信息
;;
esac

六、文件操作四剑客

(一)、正则表达式

test.sh文件

shell脚本基础,linux,运维,服务器

1.基础正则

a)查找特定字符

shell脚本基础,linux,运维,服务器

b)利用[]查找集合字符

匹配

shell脚本基础,linux,运维,服务器

 去除

shell脚本基础,linux,运维,服务器

范围匹配

shell脚本基础,linux,运维,服务器

c)查找行首"^"与行尾"$" 

shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器

以点结尾的需要转义符

shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器

d)查找任意一个字符"."与重复字符"*"

shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器

e)查找连续的字符范围"{}",需要使用转义符,"\{\}"

补wo~d中2个o,8个o

shell脚本基础,linux,运维,服务器

补go~d中2到无限个o shell脚本基础,linux,运维,服务器

2.扩展正则

+,重复一个或一个以上的前一个字符 cat test.txt | egrep -nE 'wo+d'或者
cat test.txt | egrep -n 'wo+d'(常用)
?,零个或者一个前一个字符 cat test.txt | egrep -n 'bes?t'
|,使用或者的方式找出多个字符 cat test.txt | egrep -n 'of|is|on'
(),查找组字符串 cat test.txt | egrep -n 't(a|e)st'
()+,辨别多个重复的组 cat test.txt | egrep -n 'A(xyz)+C'

shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器3.常见正则表达式 (了解)

 数字
    “^[0-9]*[1-9][0-9]*$” //正整数  
    “^((-\d+)|(0+))$” //非正整数(负整数 + 0)  
    “^-[0-9]*[1-9][0-9]*$” //负整数  
    “^-?\d+$” //整数 
    “^\d+(\.\d+)?$” //非负浮点数(正浮点数 + 0)  
    “^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$” //正浮点数 
    “^((-\d+(\.\d+)?)|(0+(\.0+)?))$” //非正浮点数(负浮点数 + 0) 
    “^(-?\d+)(\.\d+)?$” //浮点数 

字符串
    “^[A-Z]+$” //由26个英文字母的大写组成的字符串  
    “^[a-z]+$” //由26个英文字母的小写组成的字符串  
    “^[A-Za-z0-9]+$” //由数字和26个英文字母组成的字符串  
    “^\w+$” //由数字、26个英文字母或者下划线组成的字符串

Email
    “^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$” //email地址  
    “^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$”   //Email 

Url 
    “^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$” //url 

IP
    “^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$”   //IP地址

Tel 
    /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/     //电话号码

日期校验
       /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/   //  年-月-日    yyyy-MM-dd / yy-MM-dd 格式
       "^[0-9]{4}-((0([1-9]{1}))|(1[1|2]))-(([0-2]([0-9]{1}))|(3[0|1]))$"   // 年-月- 日  yyyy-MM-dd 格式
      /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/   // 月/日/年

(二)、grep进阶

-r  递归扫描指定目录下的每一个文件
-l 只显示匹配到指定关键字的文件名,而不是文件内容

案例:查看/etc目录下所有包含bash的文件名

shell脚本基础,linux,运维,服务器

egrep
    完美支持正则表达式 

find进阶

按照权限查找  -perm
按照时间戳查找 -atime
-mtime
-ctime

shell脚本基础,linux,运维,服务器

案例 shell脚本基础,linux,运维,服务器

shell脚本基础,linux,运维,服务器

 (三)、sed

语法
    sed [选项] '操作' 参数 
    sed [选项] -f scriptfile 参数

-e 表示用指定命令或脚本处理
-f 指定脚本文件
-h 帮助
-n 表示仅显示处理后的结果
-i 直接编辑文本文件
-r 支持扩展正则

操作

a 增加,在当前行下面以行增加指定内容
c 替换,将选定行替换
d 删除,删除指定行
i 插入,在选定行的上面插入一行
p 打印
s 替换,替换指定字符
y 字符转换

案例

sed -n '3p' test.txt    #打印第3行

sed -n '3,6p' test.txt    #打印第3到6行的内容

shell脚本基础,linux,运维,服务器

 sed -n 'p;n' test.txt    #打印奇数行

shell脚本基础,linux,运维,服务器

 sed -n 'n;p' test.txt    #打印偶数行

shell脚本基础,linux,运维,服务器

 sed -n '/the/p' test.txt    #匹配the

shell脚本基础,linux,运维,服务器

 nl test.txt | sed '3d'            #删除第3行

shell脚本基础,linux,运维,服务器

 nl test.txt | sed '4s/the/TTTTTT/'    #替换第4行

shell脚本基础,linux,运维,服务器

 (四)、awk

语法
    awk 选项 '模式或条件{编辑命令}' 文件1 文件2 ...
    awk -f 脚本文件 文件1 文件2 ...

选项
    -F
        指定每行的分隔符
        默认分隔符为空格

内建变量

FS 指定每行的分隔符
NF 指定当前处理行的字段个数
NR 当前处理行的行号
$0 当前处理行的整行内容
$n 当前处理的第n个字段
FILENAME 处理文件名
RS 数据记录分隔,默认是\n

案例

a)按行输出

awk '{print}' test.txt          #等同cat 

shell脚本基础,linux,运维,服务器

awk 'NR==1,NR==5{print}' test.txt         #打印1到5行

shell脚本基础,linux,运维,服务器

 awk 'NR%2==0{print}' test.txt     #打印偶数行

shell脚本基础,linux,运维,服务器

 awk 'NR%2!=0{print}' test.txt     #打印奇数行

shell脚本基础,linux,运维,服务器

 b)按段输出
    ifconfig ens33 |awk '/netmask/{print $2}'         打印出netmask行的第二列
    shell脚本基础,linux,运维,服务器

打印出uid大于等于1000的用户shell脚本基础,linux,运维,服务器

统计用户组的总数

shell脚本基础,linux,运维,服务器

总结

今天的任务量有些重,但知识点是看懂和编辑Shell脚本的基础,需要花费时间进行反复背记,加油吧!文章来源地址https://www.toymoban.com/news/detail-655715.html

到了这里,关于shell脚本基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 服务器的shell脚本

    shell脚本语句可以执行linux的操作语句。 linux相当于网页,shell相当于java。可以解释编写执行逻辑。 shell的开头以:#!bin/sh 定义解析方式,不同的linuxe内核解释方式不同。大多数内核支持sh(bash)方式。 执行sh文件可以有多种方式:             sh a.sh         bash a.sh   

    2024年02月14日
    浏览(54)
  • Shell脚本常用命令及如何通过shell脚本实现服务器上文件的上传和下载

    Shell脚本常用命令 简介 1、什么是shell: Shell 是一个用 C 语言编写的应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 脚本(shell script),是一种为 shell 编写的脚本程序,扩展名为.sh。 2、如何编写shell脚本: 文本编辑器(可以使用

    2024年02月03日
    浏览(74)
  • shell脚本实现删除服务器指定目录下文件方法

    上述脚本中,find 命令用于查找指定目录下4天以前的文件,并将其删除。其中,-type f 表示只查找普通文件,不包括目录和符号链接等其他类型的文件;-mtime +3 表示查找修改时间早于3天前的文件;-delete 表示删除查找到的文件。 脚本中的 $folder_path 可以替换为实际的目录路径

    2023年04月19日
    浏览(64)
  • shell脚本使用(宿主机windows-服务器-centos)--用于使用shell脚本方式控制docker容器

    需求: 我想要使得windows上编写shell脚本,并且在这个shell脚本在linux中也可用 shell脚本在windows上无法直接运行,但是有WSL这个linux子系统的工具 可以使得shell脚本在主机上执行 视频讲解连接 方式1 方式2

    2024年02月07日
    浏览(50)
  • VMware vCenter服务器常用的巡检命令、运维命令和PowerShell脚本

    一、前言 最近整理一些VMware vCenter和Esxi常用的巡检命令和运维命令如下: 二、巡检命令 三、运维命令 运维常用命令: 四、Powershell脚本 以上就是vCenter和ESXi常用的运维与监控命令,可以帮助vSphere管理员管理和监控环境。

    2024年02月11日
    浏览(53)
  • 实现判断服务器是否有git并拉取代码的shell脚本

    判断当前服务器是否有git,没有的话使用yum install安装,然后切换至普通用户,创建目录,并且进入新创建的目录,git clone代码

    2024年02月10日
    浏览(57)
  • 在SHELL脚本中用curl处理服务器开机、关机、强制关机、重启动作

    思路:利用了一张主控板来获取服务器的开关机状态,开关机其实是给服务器一个500ms~1000ms的脉冲,等同与按了机箱面板的开关机按钮开关。

    2024年02月07日
    浏览(55)
  • shell 脚本统计 http 文件服务器下指定目录及其子目录下所有文件的大小

    shell脚本如下: 首先 vi calculate_size.sh 写入下入内容 执行 sh calculate_size.sh http://example.com/some/dir/ 即可统计 http 文件服务器http://example.com/some/dir/ 中 dir 目录及其子目录下所有文件的大小。

    2024年02月15日
    浏览(59)
  • 运维 | 查看 Linux 服务器 IP 地址

    大多数在操作 Linux 系统时,我们经常需要知道服务器的 IP 比便于后续的一系列操作,这时候有快速查看主机 IP 的命令行操作,能够有效的帮助我们 本章节主要记录一些常用查看服务器 IP 的命令,希望对大家有所帮助。 查看 Linux 服务器的 IP 地址的命令大体上有以下几种。

    2024年04月27日
    浏览(83)
  • 阿里云——云服务器基础运维与管理

    作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。   座右铭:低头赶路,敬事如仪 个人主页: 网络豆的主页​​​​​ 目录 写在前面 学习目标: 一.3个理由拥抱云服务器 1.什么是云服务器  2.使用云服务的好处 3.推荐云服务的理由 二.1分钟快速定

    2024年02月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包