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脚本**

  4. 声明解释器

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

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

    vim /root/first.sh \] //**执行shell的文件** ----\> #!/bin/bash //**bash 调用标记** ----\> #A test program for Shell-Script //**注释信息** ----\> echo 'Hello World' //**可执行脚本语句/命令行**

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

相关推荐
崔庆才丨静觅7 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60618 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了8 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅8 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅8 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅9 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment9 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅9 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊9 小时前
jwt介绍
前端
爱敲代码的小鱼9 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax