当前位置: 首页 > news >正文

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.lryc.cn/news/128823.html

相关文章:

  • 创建maven的Springboot项目出现错误:Cannot access alimaven
  • 神经网络基础-神经网络补充概念-32-神经网络与大脑
  • linux自动填充密码及提示信息
  • IC设计中主要的EDA工具有哪些? (内附EDA虚拟机安装资源)
  • Zabbix配置通用的TCP/IP:port监控项
  • 【RocketMQ】SpringBoot集成RocketMQ
  • 思腾云计算
  • 前端面试:【HTML】语义化标签、表单、媒体元素
  • 2024浙大MBA/MEM/MPA四个月冲刺备考策略
  • Element通过v-for循环渲染的form表单校验
  • 精彩回顾 | 迪捷软件出席2023ATC汽车电子与软件技术周
  • 树莓派的自启动与桌面应用程序
  • RabbitMQ面试题
  • Kubernetes二进制部署方案
  • Android 13 开启关闭飞行模式
  • C++学习笔记总结练习:EffectiveSTL
  • SQL Developer中的Data Redaction
  • 深入解析Ed25519椭圆曲线数字签名算法的C#移植及应用示例
  • XQuery创建BaseX数据库实例
  • MySQL索引(Index)
  • web框架面试题
  • 什么是字体堆栈(font stack)?如何设置字体堆栈?
  • 推特群推王:引爆您的产品
  • [JavaWeb]【七】web后端开发-MYSQL
  • C语言:初阶测试错题(查漏补缺)
  • 数组累加器-reduce、reduceRight
  • uniapp 官方扩展组件 uni-combox 实现:只能选择不能手写(输入中支持过滤显示下拉列表)
  • TypeScript 语法
  • 已经开源的中文大模型对比,支持更新
  • 调用其他页面onload函数的方法