首页 > 系统相关 >SHELL(01)

SHELL(01)

时间:2024-03-30 10:32:25浏览次数:21  
标签:解释器 SHELL 变量 sh echo 01 let first

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可以定义结果是小数点后多少位

标签:解释器,SHELL,变量,sh,echo,01,let,first
From: https://blog.csdn.net/2401_82773077/article/details/137122419

相关文章

  • NOI2017 蔬菜
    传送门NOI的题果然是非常的难且有意思。还有就是推荐一下command_block的题解。这题的题意比较难。题意:有\(n\)种菜,初始每种菜有\(c_i\)个,单价\(a_i\),如果不出售每天会变质\(x_i\)棵。第一次卖这种菜会获得\(s_i\)的奖励。每天至多卖\(m\)个菜。给出\(q\)次询......
  • CAXA2023随机改块色(VS2019 ObjectArx)
    1//改色2voidcmdChangeColorX(boolbRand=true,CAXA::UInt16color_Index=10)3{4CDraft::ErrorStatuses;5CRxDbObjectIdobjID;6CRxDbEntity*pEntity=NULL;7crx_nameen;8crx_pointpt;9//拾取要改色的图元10......
  • 代码随想录第22天 | 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.
    235. 二叉搜索树的最近公共祖先 235.二叉搜索树的最近公共祖先-力扣(LeetCode)代码随想录(programmercarl.com)二叉搜索树找祖先就有点不一样了!|235.二叉搜索树的最近公共祖先_哔哩哔哩_bilibili给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。百度百......
  • 临时重定向(302)和永久重定向(301)区别
    临时重定向和永久重定向之间的主要区别体现在重定向的持久性、搜索引擎处理和缓存行为上。持久性:永久重定向(通常是HTTP状态码301)表明资源已经永久性地移动到了新的位置。这意味着,一旦设置了永久重定向,所有后续对原始URL的请求都应该被自动转发到新的URL,而且这个重定向是长期......
  • ccfcsp-2019-12-2回收站选址(c++满分题解)
    该题就是考察点的保存以及索引的保存和遍历,看了他的用例说明,我原先以为暴力只能得50分,但是又没有想到别的优化方法,就写了一下暴力,发现居然AC下面是代码:#include<iostream>#include<vector>#include<map>usingnamespacestd;intmain(){ intn; cin>>n; vector<pair<......
  • PX01固件更新指导
    PX01固件由三个组成部分:MCU固件、GPU固件和点屏应用固件,MCU固件主要运行PG系统,GPU固件负责图像输出,点屏应用固件负责模组点亮时序、初始化代码、测试等应用驱动,下面针对上述固件分别介绍更新方式和所使用的工具。 一、固件更新端口以上固件均通过PX01USB口进行更新,端口为......
  • ArcMap连接SQL Server2014与导入数据
    打开SOLServer2014ManagementStudio鼠标右键当前实例【属性】,查看并复制当前实例【名称】。在ArcMap的【目录】窗口中展开【数据库连接】,鼠标双击【添加数据库连接】,弹出【数据库连接】对话框【数据库平台】选择SQLServer,【实例】文本框中输入步骤1中获得的......
  • 转: ltrace 是如何工作的(2016)
    http://arthurchiao.art/blog/how-does-ltrace-work-zh/strace 是一个系统调用,也是一个信号跟踪器(signaltracer),主要用于跟踪系统调用,打印系统调用的参数、返回值、时间戳等很多信息。也可以跟踪和打印进程收到的信号。在前一篇文章strace是如何工作的 中介绍过, strace ......
  • 牛客 [NOIP2001]数的划分
    https://ac.nowcoder.com/acm/problem/16695#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<int,int>PII;constLLMAXN=1e18,MINN=-MAXN,INF=0x3f3f3f3f;constLLN=200200,M=2020;LLn,k;LLans=0;voiddfs(intidx......
  • AI计算平台设计原理图:901-基于3U VPX的图像数据AI计算平台
    基于3UVPX的图像数据AI计算平台  一、产品概述   设备基于3U VPX的导冷结构,集成FPGA接口预处理卡,GPU板卡、飞腾ARM处理卡,实现光纤、差分电口或者Camera link的图像接入,FPGA信号预处理,GPU AI计算,飞腾ARM的采集管理存储。二、系统组成   系......