SHELL(01)

Shell基础

  • Shell : [ 解释器 ]

    • 在Linux内核与用户之间的解释器程序
    • 通常指 /bin/bash , 这是系统默认解释器
    • 负责向内核翻译及传达用户/程序指令
    • 相当于操作系统的 “外壳”
  • Shell的使用方式

    • 交互式指令---------------命令行

      • 人工干预
      • 智能化程度高
      • 逐条解析执行 , 效率低
    • 非交互式指令---------------脚本

      • 需要提前设计
      • 智能化难度高
      • 批量执行 , 效率高
      • 方便在后台运行
  • bash : [ Tab键 ] , [ 快捷键 ] , [ 历史命令 ] , [ 支持别名 ] , [ 管道 ] , [ 重定向 ]

  • shell脚本 : 提前写好可执行的语句 , 可以完成特定任务的文件顺序 , 批量化执行

  • [ cat /etc/shells ] # 查看所有的解释器

  • [ sh ] # 切换进入 sh 解释器

  • [ ksh ] # 切换进入 ksh 解释器

  • [ usermod -s /bin/ksh bilibili ] # 修改用户bilibili的解释器

Shell脚本

  • 提前写好可执行语句 , 能够完成特定任务的文件
    • 顺序 , 批量化处理
    • 解释型程序
创建Shell脚本
  1. 创建文本文件

  2. 添加可执行的脚本语句 (命令行)

  3. 添加 x 执行权限

    [ vim /root/first.sh ] //创建shell脚本文件 /root/first.sh

    ----> echo ‘Hello World’ //可执行脚本(命令行)

    [ chmod +x /root/first.sh ] //给shell脚本添加可执行权限

    [ /root/first.sh ] / [ ./first.sh ] //绝对/相对路径执行shell脚本

设计Shell脚本
  1. 声明解释器

  2. 注释信息 ( 作者信息, 步骤 , 思路 , 用途 , 变量含义等 )

  3. 可执行语句 ( 操作代码 )

    [ vim /root/first.sh ] //执行shell的文件

    ----> #!/bin/bash //bash 调用标记

    ----> #A test program for Shell-Script //注释信息

    ----> echo ‘Hello World’ //可执行脚本语句/命令行

执行Shell脚本
  • 赋予 x 权限 读取解释器标记 , 根据标记选择解释器执行

    • 绝对路径执行

      [ /opt/first.sh ]

    • 相对路径执行

      [ ./first.sh ]

  • 无 x权限 不读取解释器标记 , 根据命令选择解释器执行

    • 调用解释器执行

      • 会开启解释器子进程 , 执行完后结束解释器子进程

      登录(root)----bash进程-----bash子进程----echo------结束bash子进程

      例:

      [ bash /opt/first.sh ] [ bash first.sh ] [ bash ./first.sh ]

      • 用解释器监控脚本执行

        [ bash -x /opt/first.sh ]

    • 使用 source 命令执行

      • 不会开启解释器子进程 , 执行完后不结束解释器进程
        登录(root)----bash进程-----echo
    • source 代表当前使用的解释器
      [ source /opt/first.sh ] [ source ./first.sh ] [ source first.sh ]

    • [ source ] 可以省略成 [ . ]
      [ …/first.sh ]

升级脚本
  • [ > ] 重定向标准输出

    [ yum -y install vsftpd > /bili.txt ] #把所有正确的输出内容写入文件

  • [ 2> ] 重定向错误输出

    [ yum -y install vsftp > /bili.txt ] #把所有错误回馈写入文件

  • [ &> ] 重定向所有输出

    [ yum -y install vsftpd &> /dev/null ] #把不需要显示的信息扔黑洞

Shell变量

变量的设置和取消
  • [ 变量 ] : 以固定名称存放 , 可能会变化的值

    • 提高脚本对任务的需求 , 运行环境变化的适应力提高
    • 方便在脚本中重复使用
  • [ 变量名 = 变量值 ] 例: [ x=12 ] [ name1=szhou ]

  • 变量的种类

    • 自定义变量

    • 环境变量

    • 预定义变量

    • 位置变量

自定义变量
  • 注意事项

    1. 若指定的变量名已存在,则相当于重新赋值

    2. 等号两边不要有空格

    3. 变量名由字母/数字/下划线组成 , 区分大小写

    4. 变量名不能以数字开头 , 不要使用关键字和关键字符

    5. [ unset x ] / [ x= ] 取消 x 的变量设置

  • 引用 , 调用 变量的值 : [ $变量名 ]

    • 查看变量值 : [ echo $变量名 ] [ echo ${变量名} ]
  • 例如 :

    • [ echo $x , $name1 ] -----------> 12 , szhou
    • [ echo $y.5 ] -----------> .5 #未定义的变量无取值
    • [ echo ${name1}.5 ] ------------> szhou.5 #变量名易混淆时 , 以 {} 界定
环境变量
  • 变量名称通常都大写 , 由系统维护 , 用来设置工作环境 , 只有个别变量用户可以修改

  • [ env ] #列出所有环境变量

  • 配置文件是 [ /etc/profile ] [ ~/.bash_profile ]

  • [ set ] #列出所有变量

  • 常见的环境变量

    1. [ USER ]-----------#当前用户名

    2. [ UID ]-----------#当前用户ID号

    3. [ HOME ]-----------#当前用户家目录

    4. [ SHELL ]-----------#当前用户解释器

    5. [ PWD ]-----------#当前位置

    6. [ HOSTNAME ]-----------#当前主机名

    7. [ PATH ]-----------#存储了命令的路径

    8. [ PS1 ]-----------#表示Shell环境的一级提示符 , 命令行提示符

    9. [ PS2 ]-----------#表示Shell环境的二级提示符 , 出现在强制换行场合

预定义变量和位置变量
  • 位置变量 : 在执行脚本时提供的命令参数

  • 表示为 $1 , $2 , $3 , … , ${10} , ${11} , …

  • 例 : [ bash -x /bilibili/1.sh 1 2 55 66 77 88 99 ]

    ---------->echo $1

    ---------->echo $2

    ---------->echo $3

    =======> 1 2 55

  • 预定义变量 : 用来保存脚本程序的执行信息

    • 直接使用这些变量
    • 不能直接为这些变量赋值
      • [ $0 ] ----------> 当前所在进程或脚本名
      • [ $$ ] ----------> 当前运行进程的PID号
      • [ $? ] ----------> 命令执行后的返回状态 , 0表正常 , 1或其他表异常
      • [ $# ] ----------> 已加载的位置变量的个数
      • [ $* ] ----------> 所有位置变量的值
      • [ $! ] ----------> 现在UID
变量值及范围控制
  • 区分变量的三种定界

    • [ " " ] 双引号 : 允许扩展 , 以 $ 引用其他变量
      • [ xx=“a b c $1” ]
    • [ ’ ’ ] 单引号 : 禁止扩展 , 即便 $ 也视为普通字符
      • [ echo ‘$test’ ]
    • [ `` ] 反撇号 : 将命令的执行输出作为变量值 . [ $() ] 同效.
      • [ a=$(ls) ]
  • [ read ] 标准输入取值

    • [ read ] 从键盘读入变量值完成赋值
    • 格式 : read [ -p “提示信息” ] 变量名
    • [ -p ] 可选 , [ -t ] 可指定超时秒数

    [ read -p “请输入密码 :” n_passwd ]

    -----------> 请输入密码 :

    ------------> 123456789

    [echo $n_passwd]

    ----------> 123456789

  • [ stty ] 终端显示控制

    • [ stty -echo ] 将回显功能关闭
    • [ stty echo ] 将回显功能恢复
  • [ export ] 发布全局变量scale=2;

    • 默认下 , 自定义变量为局部变量 , 只在当前Shell环境中生效 , 其他子Shell环境不认可
    • 使用 [ export bilibili ] 发布已定义的变量 ** , 使其变成全局变量**
计算
  • 基础整数运算 , 直接调用结果 , 需要 echo 等其他函数

  • 引用变量可省略 $ 符号

    1. $[ 1+2 ] --------- 加法
    2. $[ a-b ] --------- 减法
    3. $[ a * b ] --------- 乘法
    4. $[ a/b ] --------- 除法取整
    5. $[ a%b ] --------- 触发取余 ( 求模 )
  • [ expr ] 运算工具

  • 计算指定的表达式 , 并输出结果

    • 格式 : expr 数字1 运算符 数字2
    • 乘法操作使用 [ \ * ] 转义
      1. expr $x + $y
      2. expr $x - $y
      3. expr $x \ * $y
      4. expr $x / $y
      5. expr $x % $y
  • [ let ] 其他方式只能计算 , let命令可以直接对变量值做运算再保存新的值

常规写法 主流写法
let a=a+1 let a++ #变量a加1
let a=a-1 let a-- #变量a减1
let a=a+10 let a+=10 #变量a加10
let a=a-10 let a-=10 #变量a减10
let a=a*2 let a *=2 #变量a乘以2
let a=a/2 let a/=2 #变量a除以2
let a=a%3 let a%=3 #变量a除以3取余数

  • [ bc ]

bc非交互式运算

将需要运算的表达式通过管道操作交给bc运算。注意,小数位的长度可采用scale=N限制。

[ echo “1.1+1” | bc ]

[ echo “scale=2;10/3” | bc ] #scale可以定义结果是小数点后多少位

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

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

相关文章

【NOI】树的初步认识

文章目录 前言一、树1.什么是树?2.树的基本概念3.树的基本术语3.1 节点3.1.1 根节点3.1.2 父节点、子节点3.1.3 兄弟节点、堂兄弟节点3.1.4 祖先节点、子孙节点3.1.5 叶子节点/终端节点3.1.6 分支节点/非终端节点 3.2 边3.3 度3.3.1 树的度 3.4 层次3.4.1 树的深度3…

ERROR: No matching distribution found for tb-nightly

问题描述 安装tb-lightly失败:ERROR: No matching distribution found for tb-nightly 解决方案 因为我的镜像源默认是清华的,但是pip源中没有对应的“tb-nightly”依赖包。 如果不知道的,也可以查看一下pip的配置: python -m …

【Go】结构体中Tag标识

https://blog.csdn.net/weixin_45193103/article/details/123876319 https://blog.csdn.net/qq_49723651/article/details/122005291 https://juejin.cn/post/7005465902804123679 学一点,整一点,基本都是综合别人的,弄成我能理解的内容 Tag定…

前端 插件/库 总结

1. antv/g6 图可视化引擎。它提供了图的绘制、布局、分析、交互、动画等图可视化的基础能力 官方文档:快速上手 | G6 vue antvG6树图的摸索总结—新手入门 vue antv-G6树图的摸索总结—新手入门_antv g6-CSDN博客 AntV G6的相关使用总结 AntV G6的相关使用总结…

GeoTrust SSL证书有什么优势?

GeoTrust SSL证书具备以下显著优势: 1. 市场占有率比较高:GeoTrust作为知名的SSL证书供应商,拥有广泛的市场接受度和高占有率,表明其产品受到众多企业和网站的信任和采用。 2. 品牌信誉与信任标识:在高安全性浏览器中&…

Unity3d使用Jenkins自动化打包(Windows)(一)

文章目录 前言一、安装JDK二、安装Jenkins三、Jenkins插件安装和使用基础操作 实战一基础操作 实战二 四、离线安装总结 前言 本篇旨在介绍基础的安装和操作流程,只需完成一次即可。后面的篇章将深入探讨如何利用Jenkins为Unity项目进行打包。 一、安装JDK 1、进入…

在word中显示Euclid Math One公式的问题及解决(latex公式,无需插件)

问题:想要在word中显示形如latex中的花体字母 网上大多解决办法是安装Euclid Math One。安装后发现单独的符号插入可行,但是公式中选择该字体时依然显示默认字体。 解决办法:插入公式后,勾选左上角的latex 在公式块中键入latex代码…

前端理论总结(css3)——css新特性//盒模型

css新特性 1:新增各种CSS选择器 (:not(.input):所有class不是“input”的节点) 2:RGBA 3:多栏布局(column-count/gap/rule) 4:多背景图(ba…

Go语言爬虫实战(线程池)

Go语言爬虫实战 目标 利用go语言爬取指定网站的图片。实现爬取网站任意页面所有所需的图片。实现使用go语言线程池开启多个线程爬取图片内容。最后实现创建多个文件夹存储图片。 爬取网站图片 步骤 对指定URL发去GET请求,获取对应的响应。 resp, err : http.Get(…

【JavaWeb】Day24.Web入门——HTTP协议(一)

HTTP协议——概述 1.介绍 HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。 http是互联网上应用最为广泛的一种网络协议http协议要求:浏览器在向服务器发送请求数据时,或是服务器在…

AI写作的力量:让你的文章焕发生机

在当今数字化时代,内容创作变得越来越重要。无论是博客文章、广告文案还是社交媒体更新,优质的文本都能吸引读者的注意力并传达信息。然而,创作过程并不总是轻松的,尤其是当我们面临灵感枯竭或时间紧迫的挑战时。这就是AI写作的力…

网站为什么要选择使用安全加速SCDN?

安全加速SCDN(安全内容交付网络)是一种网络加速服务,旨在提高网站和应用程序的性能和安全性。它使用专门的技术和基础设施来加速内容传输并保护网站免受网络攻击。 安全加速SCDN可以通过内容缓存、快速传输和动态路由技术来加速网站和应用程…

安卓调试桥ADB

Logcat 命令行工具 | Android Studio | Android Developers 什么是ADB ADB 全称为 Android Debug Bridge ,是 Android SDK (安卓的开发工具)中的一个工具,起到调试桥的作用,是一个 客户端 - 服务器端程序 。其中 …

mac m1安装和使用nvm的问题

mac m1安装和使用nvm的问题 使用nvm管理多版本node 每个项目可能用的node版本不同,所以需要多个版本node来回切换 但是最近遇到安装v14.19.0时一直安装失败的问题。 首先说明一下,用的电脑是mac M1芯片 Downloading and installing node v14.19.0... …

【Linux】开始掌握进程控制吧

送给大家一句话: 我并不期待人生可以一直过得很顺利,但我希望碰到人生难关的时候,自己可以是它的对手。—— 加缪 开始学习进程控制 1 前言2 进程创建2.1 fork函数初识2.2 fork函数返回值2.3 写时拷贝2.4 fork常规用法2.5 fork调用失败的原因…

3月23日笔记

广播域与泛洪范围是相同的 广播:在同一个泛洪范围内,强迫交换机泛洪(主动) 泛洪(被动) ARP的工作原理:ARP先通过广播发送请求包,所有收到该广播包的设备都会将其中的源IP和源MAC相…

Oracle存数字精度问题number、binary_double、binary_float类型

--表1 score是number(10,5)类型 create table TEST1 (score number(10,5) ); --表2 score是binary_double类型 create table TEST2 (score binary_double ); --表3 score是binary_float类型 create table TEST3 (score binary_float );实验一:分别往三张表插入 小数…

OpenCV 形态学处理函数

四、形态学处理(膨胀,腐蚀,开闭运算)_getstructuringelement()函数作用-CSDN博客 数字图像处理(c opencv):形态学图像处理-morphologyEx函数实现腐蚀膨胀、开闭运算、击中-击不中变换、形态学梯度、顶帽黑帽变换 - 知乎…

QT(3/25)

完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示“登录成功”,提供一个OK按钮,用户点击OK后,关闭登录界面,跳转到其他界面。 如果账号和密码不匹配&#…

代码随想录学习Day 20

669.修剪二叉搜索树 题目链接 讲解链接 思路&#xff1a;采用递归方法&#xff0c;若root.val > high&#xff0c;判断左子树是否为空&#xff0c;若不空&#xff0c;递归遍历左子树&#xff0c;若空就返回null&#xff1b;若root.val < low&#xff0c;则判断右子树是…