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

相关推荐
花花鱼5 分钟前
vue3 基于element-plus进行的一个可拖动改变导航与内容区域大小的简单方法
前端·javascript·elementui
k09339 分钟前
sourceTree回滚版本到某次提交
开发语言·前端·javascript
EricWang135830 分钟前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端
September_ning30 分钟前
React.lazy() 懒加载
前端·react.js·前端框架
web行路人40 分钟前
React中类组件和函数组件的理解和区别
前端·javascript·react.js·前端框架
超雄代码狂1 小时前
ajax关于axios库的运用小案例
前端·javascript·ajax
长弓三石1 小时前
鸿蒙网络编程系列44-仓颉版HttpRequest上传文件示例
前端·网络·华为·harmonyos·鸿蒙
小马哥编程1 小时前
【前端基础】CSS基础
前端·css
嚣张农民2 小时前
推荐3个实用的760°全景框架
前端·vue.js·程序员
周亚鑫2 小时前
vue3 pdf base64转成文件流打开
前端·javascript·pdf