笔记:快速上手shell编程

2023-11-17

SHELL学习笔记

变量赋值

# 赋值
A = 10 # 不允许, 赋值时不允许在等号两侧出现空格
A=10 #允许
A= 10 #不允许
A=" 10" #允许

#当赋值时需要填充多个空格,可以使用""

环境变量

[root@localhost gitee]echo $PWD
/usr/local/gitee
# 打印当前目录
[root@localhost gitee]echo $HOME
/root
# 打印家目录

变量作用域

# 定义局部变量A
[root@localhost test]# A=10
[root@localhost test]# echo $A
10

# 编写shell脚本
#!/bin/bash
echo $A

# 执行shell脚本
[root@localhost test]# sh test.sh 

# 因为A的作用域不是全局,因此test.sh无法获取A的值

# 局部变量作用域升级
[root@localhost test]# export A
[root@localhost test]# sh test.sh 
10

特殊变量

$n

  • 作用:执行shell脚本时,传入的参数

  • tip:$0表示脚本名称

  • eg:

    # 编写shell脚本
    #!/bin/bash
    echo $1 $2
    
    # 执行shell脚本
    [root@localhost test]# sh test.sh a b
    a b
    

$#

  • 作用:执行shell脚本时,确定传入的参数个数

  • eg:

    # 编写shell脚本
    #!/bin/bash
    echo "$1 $2"
    echo "$#"
    
    # 执行shell脚本
    [root@localhost test]# sh test.sh a b c
    a b
    3
    # 接受2个参数,但实际传入的是3个
    

$?

  • 作用:判断上一条指令是否成功执行,如果成功执行,返回0;else 返回非0

  • eg:

    [root@localhost test]# sh test.sh a b c
    a b
    3
    [root@localhost test]# echo $?
    0
    # 上一条执行脚本指令成功执行,因此返回0
    
    [root@localhost test]# a = 10
    -bash: a: 未找到命令
    [root@localhost test]# echo $?
    127
    # 上一条执行赋值命令执行失败,因此返回非0
    

$*

  • 获取所有输入的参数

  • eg

    [root@localhost test]# vim test.sh 
      1 #! /bin/bash
      2 echo $*
    [root@localhost test]# sh test.sh 1 2 3
    1 2 3
    

计算

  • 基本语法

    • $((运算式)) | $[运算式]
    • expr + - \* / mod
    • tip: expr的 运算符间 一定要有空格
  • eg

    [root@localhost ~]# expr 1+2
    1+2
    [root@localhost ~]# expr 1 + 2
    3
    [root@localhost ~]# expr 1 + 2 * 4
    expr: 语法错误
    [root@localhost ~]# expr `expr 1 + 2` \* 4
    12
    # expr对于符合运算支持较差
    [root@localhost ~]# echo $[1 + 2 * 4]
    9
    [root@localhost ~]# echo $[1 + 2 \* 4]
    -bash: 1 + 2 \* 4: 语法错误: 无效的算术运算符 (错误符号是 "\* 4"# $[] 不认识 \*
    

条件判断

  • [ contidion ] tip:两端必须有空格

  • 条件

    •   − l t   < ( l e s s   t h a n ) ~-lt~< (less~than)  lt <(less than)
    •   − l e   ≤ ( l e s s   e q u a l ) ~-le~\le (less~equal)  le (less equal)
    •   − e q   = = ( e q u a l ) ~-eq~== (equal)  eq ==(equal)
    •   − g t   > ( g r e a t e r   t h a n ) ~-gt~>(greater~than)  gt >(greater than)
    •   − g t   ≥ ( g r e a t e r   e q u a l ) ~-gt~\ge (greater~equal)  gt (greater equal)
    •   − n e   ≠ ( n o t   e q u a l ) ~-ne~\ne (not~equal)  ne =(not equal)
  • eg

    [root@localhost ~]# [23 -gt 22]
    -bash: [23: 未找到命令
    [root@localhost ~]# [ 23 -gt 22 ]
    [root@localhost ~]# [ 23 -gt 22 ]
    [root@localhost ~]# echo $?
    0
    # 上一条执行结果为真 (命令正常执行(因为为真), 因此返回值为0)
    [root@localhost ~]# [ 23 -lt 22 ]
    [root@localhost ~]# echo $?
    1
    # 上一条执行结果为假 (指令执行不成功(因为为假),因此返回值为1)
    

流程控制

if

  • # 写法1
    if [ condition ]; then #if和条件之间必须空格, 结尾要有; 
    	程序
    fi #结束标志
    
    # 写法2
    if [ condition ]
    	then
    	程序
    fi
    
  • eg

    # 测试脚本
    #!/bin/bash
    if [ 1 -gt 2 ]; then
            echo 'wocao'
    fi
    echo "nima"
    [root@localhost test]# sh test.sh 
    nima
    [root@localhost test]# vim test.sh 
    #!/bin/bash
    if [ 1 -lt 2 ]; then
            echo 'wocao'
    fi
    echo "nima"
    [root@localhost test]# sh test.sh 
    wocao
    nima
    
    #测试脚本
    

case

  • case $变量名 in
    "值1")
    	执行语句
    ;;
    "值2")
    	执行语句
    ;;
    *)
    	功能类似default
    ;;
    esac
    
  • eg

     # 编写的脚本文件
     1 #!/bin/bash
     2 case $# in
     3 1)
     4   echo "牛掰啊,输入了一个变量"
     5 ;;
     6 2)
     7   echo "卧槽,输入了两个变量"
     8 ;;
     9 *)
     10   echo "淦,不许输入超过2个变量"
     11 ;;
     12 esac
     
    [root@localhost test]# sh test.sh 1
    牛掰啊,输入了一个变量
    [root@localhost test]# sh test.sh 1 2
    卧槽,输入了两个变量
    [root@localhost test]# sh test.sh 1 2 3
    淦,不许输入超过2个变量
    [root@localhost test]# sh test.sh 1 2 3 4
    淦,不许输入超过2个变量
    

for

  • for ((i=0; i<=100; ++i))
    do 
    	程序
    done
    
  • eg

    [root@localhost test]# vim test.sh 
      1 #! /bin/bash
      2 sum=0
      3 for ((i=0; i<=100; ++i))
      4 do
      5   # 获取值相加,加法需要运算表达式
      6   sum=$[$sum+$i]
      7 done
      8 echo $sum
    [root@localhost test]# sh test.sh 
    5050
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

笔记:快速上手shell编程 的相关文章

随机推荐

  • caffe代码阅读7:LayerRegistry的实现细节-2016.3.18

    一 LayerRegistry的作用简介 LayerResistry的功能很简单 就是将类和对应的字符串类型放入到一个map当中去 以便灵活调用 主要就是注册类的功能 二 LayerRegistry类的详细介绍 1 构造函数和析构函数 构造
  • c-tree数据库(c-treeACE)(7):开发篇之一

    C tree提供了很多种的API 我们主要使用C 的 即c treeDB C API 主要的参考手册就是Faircom公司网站上提供的 c treeDB C API Developer s Guide 学习开发的一个最佳途径当时看看tuto
  • Python 中的自动点击器——2 种简单易行的方法

    在本教程中 我们将了解Python 中的自动答题器 我们将首先了解它的含义以及如何在 Python 中实现它 那么 事不宜迟 让我们进入正题 Auto Clicker是一种 Python 软件 允许用户以较短的时间间隔连续点击鼠标 它由用户
  • Mysql中关于NULL值的处理

    一 Mysql空值介绍 MySQL认为任何和NULL值做比较的表达式的值都为NULL 包括select null null和select null null 在对统计索引列不重复值的数量时如何对待NULL值 MySQL专门提供了一个inno
  • React 练习项目,仿简书博客写作平台

    Introduction 技术栈 react redux react router express Nginx 练习点 redux 连接 react router 路由跳转 scss 样式书写 容器组件与展示组件的设计 express 脚手
  • 【100%通过率 】【华为OD机试c++】人数最多的站点【2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 关注公园园区提供小火车单向通行 从园区站点编号最小到最大通行如1 2 3 4 1 然后供员工在各个办公园区穿梭 通过对公司N个员工调研统计到每个
  • cloudflare解析域名+CDN

    cloudflare解析域名 CloudFlare 是一家全球知名的 CDN 服务商 并且提供了免费的 CDN 套餐 还不限流量 所以我们完全不需要花一分钱就能使用它的 CDN 服务 接下来我就说明如何注册并使用 CloudFlare 1
  • C/C++中的数据结构对齐,#pragma pack() 和 __attribute__

    C C 中的数据结构对齐 总览 数据结构对齐是指在计算机内存中排列和访问数据的方式 它包含三个独立但相关的问题 数据对齐 data alignment 数据结构填充 data structure padding 和打包 packing 当数
  • Servlet传送对象给Applet使用

    前日 一位朋友与我谈论Servlet与Applet共享Java对象的问题 现发表出来与大家分享 文中瑕癖 之处甚多 望各位指教 朋友谈论的需求是这样的 他想通过页面上一个Applet呼叫一个服务器Servlet 而从Servlet产生 一个
  • Anaconda3安装TensorFlow2.0.0镜像并且配置好Jupyter Notebook

    我们安装TensorFlow1 2 1但是后面又要安装Tensorflow2 0 0 那么我们就需要让Tensorflow两个版本在windows电脑下进行共存 首先 我们先下载了anacoda3和配置好了清华镜像 我们打开anaconda
  • 从零开始编译OpenWrt固件

    从零开始编译OpenWrt固件 前言 进来阅读这篇文章的相信都是对OpenWrt有一定的了解的 对于OpenWrt的介绍这里就不再赘述 可以自行查找相关百科了解 OpenWrt是适合于嵌入式设备的一个Linux发行版 可以通过其提供的相关工
  • Docker使用基础命令(记录贴)

    Docker使用基础命令 基础命令 拉取 推送镜像 docker run命令 基础操作 保存镜像并压缩 基础命令 docker images grep xxx docker ps a grep xxx 导入容器 docker load i
  • vue+antD 表格中使用input

    vue antD 表格中使用input 在这里插入代码片
  • 【编程与算法基础】数据结构——时间复杂度与空间复杂度

    文章目录 算法的时间复杂度和空间复杂度 一 前言 1 算法的效率 2 复杂度的表示方法 大O渐进表示法 3 大O渐进表示法的规则 二 时间复杂度 1 时间复杂度的概念 2 简单时间复杂度计算举例 3 复杂时间复杂度的计算举例 三 空间间复杂
  • C++实践之Qt学习(六):Qt设计器之常用控件、布局和样式

    文章目录 常用控件 按钮 普通按钮 单选按钮 多选按钮 其他的按钮 显示控件 标签 其他显示控件 输入控件 数据项控件 容器控件 布局 Qt布局介绍 设置布局的方式 样式 外部样式表 常用控件 按钮 Buttons分类中包含了Qt中常用的按
  • Appium使用教程(七)——获取appPackage和appActivity

    appPackage和appActivity 进行appium自动化测试非常重要的两个参数 我们所测试的APP不同 这两个参数肯定也是不一样的 那如何快速的获取这APP的这两个参数呢 我这里介绍五个方法 方法一 最简单有效的方法 通过cmd
  • Ubuntu 之 docker 无法下载镜像

    问题 使用 docker pull 命令拉取镜像出现如下错误 解决方案 1 在 etc docker 中创建 daemon json 文件 vim etc docker daemon json 2 写入 registry mirrors h
  • Android 夜间模式(白/夜间模式的切换)

    在项目研发中 我们避免不了需求中会应用到夜间模式 这里对它做一些总结以及封装 从API 23后 Android就有自带的api能够实现夜间模式与白天模式的切换 Support Library 23 2 应用于API14 推出了适合Andro
  • 逐点比较法实现直线圆弧插补[数控机床]

    逐点比较法实现不同象限直线 圆弧插补 一 原理介绍 1 1 简介 1 2 逐点比较法偏差计算 直线 1 2 1 第一象限逐点比较法思路 1 2 2 四象限逐点比较法实现思路 1 3 逐点比较法偏差计算 圆弧 1 3 1 第一象限逐点比较法思
  • 笔记:快速上手shell编程

    SHELL学习笔记 变量赋值 赋值 A 10 不允许 赋值时不允许在等号两侧出现空格 A 10 允许 A 10 不允许 A 10 允许 当赋值时需要填充多个空格 可以使用 环境变量 root localhost gitee echo PWD