shell脚本基础

目录

前言

一、概述

(一)、shell脚本基础概念

(二)、shell的类型

二、Shell变量

(一)、组成

1.变量名

2.变量值

(二)、类型

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

2.自定义变量

3.预定义变量

 4.位置变量

5.作用域      

​6.shell中的字符串      

三、运算符

(一)、数学运算

(二)、比较运算     

1.逻辑运算符

2.条件测试

3.字符串比较

4.数值比较

5.文件比较

四、shell脚本

(一)、shell脚本编写规范        

(二)、shell运行规则

(三)、shell脚本运行追踪

总结



前言

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变量

(一)、组成

1.变量名

不会变化

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

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

2.变量值

        不断变化

        数字、字符

(二)、类型

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

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

env可在/etc/profile文件中修改
   

查看环境变量

echo $PATH

显示当前环境变量的值

echo $LANG

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

查看当前的区域设置

locale

查看远程连接

echo  $SSH_CONNECTION

2.自定义变量

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

varName=varValue

等号两边不能有空格

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

引号的用法

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

3.预定义变量

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

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

  

 一般情况下失败为1,特殊的失败


 4.位置变量

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

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

5.作用域      

输出        echo $varName

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

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


  
        
  
  6.shell中的字符串      

string
 1)获得字符串的长度         

语法:    ${#StringName}

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

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

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

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

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

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

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

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

三、运算符

(一)、数学运算

+ - * / %   * 作为乘号时需要加转义符为\*
运算方法
 exprexpr $a + $b
$((a+b))echo $((a+b))
$[a+b]echo $[a+b] 
注意shell不支持浮点数的显示

\r回车符
\d垂直制表符
\v水平制表符

  

(二)、比较运算     

1.数值比较

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

用test测试

2.文件比较

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

 

3.字符串比较

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

4.逻辑运算符

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

  

5.条件测试

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

四、shell脚本

(一)、shell脚本编写规范
        

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

(二)、shell运行规则

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

不打断会一直查看 

(三)、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


    
read -p "提示语" 变量名读取键盘输入并赋值给变量名
 


总结

今天的任务量有些重,但知识点是看懂和编辑Shell脚本的基础,需要花费时间进行反复背记,加油吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/42069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PIN TO PIN替代LT8911EXB|CS5523低成本替代LT8911EXB|MIP DSI转DP EDP方案设计

PIN TO PIN替代LT8911EXB|CS5523低成本替代LT8911EXB|MIP DSI转DP EDP方案设计 LT8911EXB是MIPI DSI/CSI 转eDP转换芯片,ASL CS5523不需要改电路就可以直接PIN TO PIN替代与兼容LT8911EXB。 ASL CS5523与 LT8911EXB的功能与参数,用途方式以及封装方式和…

FL Studio for Windows-21.1.0.3713中文直装版功能介绍及系统配置要求

FL Studio 21简称FL水果软件,全称是:Fruity Loops Studio编曲,由于其Logo长的比较像一款水果因此,在大家更多的是喜欢称他为水果萝卜,FL studio21是目前最新的版本,这是一款可以让你的计算机就像是一个全功能的录音室&…

Docker Dockerfile Docker-compose学习笔记

文章目录 Centos环境下安装Docker配置镜像源 Windows环境下安装Docker配置镜像源 使用Dokcer镜像1.获取镜像2.查看镜像信息(1)列出镜像(2)镜像标签(3)镜像详细信息(4)镜像历史 3.搜索镜像4.删除和清理镜像(1)使用标签删除镜像(2)使用ID删除镜像(3)清理镜像 5.创建镜像(1)基于已…

56.linux 进程管理命令和用户管理命令

目录 一、进程管理命令 1.ps 2.pstree 3.kill 4.pkill 5.&后台运行程序 6.jobs 7.fg bg 8.top 二、用户管理命令 1.系统存储用户信息的文件 2.添加新用户 3.修改用户密码 4.删除用户 一、进程管理命令 1.ps 用于查看当前系统中运行的进程信息。它可以…

进行 200 瓦太阳能 (PV) 模块设计以测量太阳能光伏阵列的电压、电流和功率、综合负荷频率和电压控制系统的方法研究(Simulink实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

如何使用CSS实现一个响应式视频播放器?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现响应式视频播放器⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣…

【小梦C嘎嘎——启航篇】string介绍以及日常使用的接口演示

【小梦C嘎嘎——启航篇】string 使用😎 前言🙌C语言中的字符串标准库中的string类string 比较常使用的接口对上述函数和其他函数的测试代码演示: 总结撒花💞 😎博客昵称:博客小梦 😊最喜欢的座右…

c语言每日一练(9)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…

算法通关村第十关 | 数组中第k个最大元素

1.数组中第k大的数字 题目: LeetCode:数组中的第k个最大元素,给定整数数组nums和整数k,请返回数组中第k个最大的元素,请注意,你需要找的是数组排序后第k个最大的元素,而不是第k个不同的元素。 运…

JVM——配置常用参数,GC调优策略

文章目录 JVM 配置常用参数Java内存区域常见配置参数概览堆参数回收器参数项目中常用配置常用组合 常用 GC 调优策略GC 调优原则GC 调优目的GC 调优策略 JVM 配置常用参数 Java内存区域常见配置参数概览堆参数;回收器参数;项目中常用配置;常…

element-Plus中el-menu菜单无法正常收缩解决方案

<el-menu :collapse"true">如图所示收缩之后&#xff0c;有子级的菜单还有箭头文字显示 从代码对比看层级就不太对了&#xff0c;嵌套错误了&#xff0c;正常下方官网的ul标签下直接是li&#xff0c;在自己的代码中&#xff0c;ul标签下是div标签&#xff0c;层…

FairyGUI编辑器自定义菜单扩展插件

本文涉及到的软件有&#xff1a;FairyGUI&#xff0c;VSCode 代码环境涉及到了&#xff1a;Lua VSCode插件&#xff1a;EmmyLua 在编写FairyGUI编辑器菜单前&#xff0c;了解一下FairyGUIEditor的API会有效的帮助我们解决很多问题。FairyGUI的扩展是通过编辑器自带的插件功能…

【嵌入式】MKV31F512VLL12 微控制器 (MCU) 、Cyclone® IV E EP4CE10E22I8LN,FPGA-现场可编程门阵列芯片

1、MKV31F512VLL12 微控制器 (MCU) 是适用于BLDC、PMSM和ACIM电机控制应用的高性能解决方案。这些MCU采用运行频率为100MHz/120MHz、带数字信号处理 (DSP) 和浮点单元 (FPU) 的ARM Cortex-M4内核。KV3x MCU配备两个采样率高达1.2MS/s的16位ADC、多个控制定时器以及512KB闪存。 …

Codeforces Round 893 (Div. 2) D.Trees and Segments

原题链接&#xff1a;Problem - D - Codeforces 题面&#xff1a; 大概意思就是让你在翻转01串不超过k次的情况下&#xff0c;使得a*&#xff08;0的最大连续长度&#xff09;&#xff08;1的最大连续长度&#xff09;最大&#xff08;1<a<n&#xff09;。输出n个数&…

模糊测试面面观 | 模糊测试工具知多少

自1988年威斯康星大学的Barton Miller首次提出模糊测试这一概念以来&#xff0c;模糊测试领域经历了持续长久发展。模糊测试作为一种软件测试方法&#xff0c;旨在通过向程序输入模糊、随机、异常的数据&#xff0c;探测和发现潜在的漏洞和错误。这种方法备受安全研究人员的青睐…

助推打造全球研发中心城市 | 李彦团队:研发,带来了二次文艺复兴

2017年&#xff0c;长沙经联合国教科文组织评选&#xff0c;成为中国首座获评世界“媒体艺术之都”称号的城市。6年后&#xff0c;基于时代发展的新要求&#xff0c;长沙再次提出了“打造全球研发中心城市”的目标&#xff0c;并朝着新的方向迈进。 旧有的优势产业在新的研发浪…

信安通用基础知识

文章目录 密码学经典误区PGP优良保密协议信安经典其它安全手段XSS与CSRF cross site request forgeryCSRF的利用逻辑CSRF示例CSRF防范检查Referer字段添加校验token XSS cross site scripting common weakness enumeration常见密码api误用&#xff08;摘自毕设参考文献&#xf…

用Java实现原神抽卡算法

哈喽~大家好&#xff0c;好久没有更新了&#xff0c;也确实遇到了很多事&#xff0c;这篇开始恢复更新&#xff0c;喜欢的话&#xff0c;可以给个的三连&#xff0c;什么&#xff1f;你要白嫖&#xff1f;那可以给个免费的赞麻。 &#x1f947;个人主页&#xff1a;个人主页​​…

七月 NFT 行业解读:游戏和音乐 NFT 引领增长,Opepen 掀起热潮

作者&#xff1a;lesleyfootprint.network 2023 年 7 月&#xff0c;NFT 市场的波动性持续存在&#xff0c;交易量呈下降趋势。然而&#xff0c;游戏和音乐 NFT 等领域的增长引人注目。参与这些细分领域的独立用户数量不断增加&#xff0c;反映了这些领域的复苏。 本综合报告…

lvs负载均衡群集

lvs组成 1、lvs基于内核态的netfilter框架实现的IPVS功能&#xff0c;工作在内核态用户配置VIP等相关信息并且传递到IPVS 就需要用到IPVSadm工具。 2、ipvsadm&#xff1a;IPVSadm是lvs用户态的配套的工具&#xff0c;可以实现VIP和RS 增删改查。 IPVSadm就是类似于iptables…