Linux - 介绍和Shell脚本

Linux 介绍:

  1. Linux特点: Linux 下一切皆文件

  2. Linux目录特点:

    Linux1

  3. Linux的内核架构:

    Linux2

shell 定义与含义:

  1. 是一个编程语言 —> shell 脚本语言
  2. 是一个应用程序 —> 解释器
  3. 交互式的解释、执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应功能—称之为 shell 命令解析器

Shell 命令:

  1. chmod 命令:

    1. chmod 命令是用来改变文件权限
    2. 如:chmod 777 shell.sh 表示修改文件shell.sh的权限为777
  2. #!指定命令编译器:

    1. shell 脚本语言中的第一行一般为指定命令解释器
    2. #!:用来声明脚本由什么 shell 解释,否则使用默认 shell
    3. 如:#!/bin/bash 指定编译器
  3. #为单行注释符号

  4. echo 命令:

    1. echo 可以回显输出的指令
    2. 如:echo “hello world!!!” 输入hello world!!!
  5. declare 命令:

    1. declare 是 bash 的一个内建命令,可以用来声明 shell 变量、设置变量的属性
    2. declare 也可以写作 typeset
    3. declare -i s 代表强制把 s 变量当做 int 型参数运算
  6. shell 三种运行方式:

    Linux3

    • ./ 和 bash 执行过程基本一致,bash 是明确指定 bash 解释器去执行脚本,如果脚本中 #! 指定了解释器,则不起作用,./ 是使用 #! 指定的 shell
    • 用 ./ 和 bash 去执行会在后台启动一个新的 shell 去执行脚本
    • . 去执行脚本不会启动新的 shell,直接由当前 shell 去解释执行脚本

shell 变量:

  1. 定义变量:

    1. 变量直接使用即可,但是 = 两边不能有空格
    2. 如:a=10
    3. 解释:不需要加 ; ,也不用加数据类型,现在就表示的是变量 a 等于 10
    4. 注意:变量值等于 10 ,是字符串的 10,shell脚本所有变量默认是字符串
  2. 引用变量 $ :

    1
    2
    a=10
    echo $a #会输出10
  3. ‘’ 和 “” :

    • ‘’ :就是字符串

    • “” :带格式转换的字符串

      Linux4

  4. unset 清除变量:

    1
    2
    3
    4
    5
    6
    a="abcde"
    echo $a #输出abcde
    unset a
    echo $a #输出空白
    a=66
    echo $a #输出66
  5. read 获取变量:

    • 类似于 c 语言的 scanf 函数, read 是一个阻塞型的 shell 命令

      1
      2
      3
      4
      a="abcde"
      echo $a #输出abcde
      read a #程序停在着 等待键盘输入值 如输入10
      echo $a #输出10
  6. readonly 只读变量:

    • 类似于 c 语言的关键字 const

      1
      2
      3
      4
      a="abcde"
      echo $a #输出abcde
      readonly a #变量a 变为只读变量
      a=10 #报错 不能修改
  7. env 环境变量与指令:

    1. 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数
    2. 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息
    3. 使用 env 指令可以查看当前系统拥有的环境变量
    4. 环境变量任意一个进程都可以使用(引用变量即可)
  8. export、source 导出环境变量:

    1. export 用于将 Shell 变量导出为环境变量,使得该变量在当前 Shell 及其子进程 中可见
    2. export 语法:
      1. 它是在 shell 脚本里面使用的
      2. 如:export a=10
    3. source 用于 在当前 Shell 环境中执行脚本
    4. 如果需要定义的环境变量在系统生效,必须使用 source 运行脚本文件: source ./xxx.sh
    5. 生效时间:立即生效,但仅对当前终端会话有效
  9. 预设变量:

    1. 用途 1:执行 shell 脚本时传入的参数
    2. 用途 2:后期 shell 函数传参与返回值

    Linux5

    Linux6

Shell 语句和算术运算语法:

  1. 测试语句:

    1. test 语句:

      1. 测试语句关键字 test
      2. 格式:test 测试条件
      3. 测试语句运算符 [](条件两边加上空格)等同于test
      4. 如:[(空格)测试条件(空格)]
    2. 文件测试:

      • 可以测试文件的状态、文件是否存在、文件是否有数据、文件的类型、文件的权限

        Linux7

        1
        2
        3
        4
        5
        #!/bin/bash

        echo $1 #执行shell脚本传递的参数
        test -e $1 #匹对文件是否存在
        echo $? #输出结果 0为真,1为假

        Linux8

      • 预设变量 $? 的返回值问题:

        Linux9

    3. 字符串测试:

      • 可以判断两个字符串是否相等、单个字符串是否为空

        LInux10

        1
        2
        3
        4
        5
        #!/bin/bash

        read a
        [ $a=1234 ]
        echo $?

        Linux11

    4. 数字测试:

      Linux12

      1
      2
      3
      4
      5
      #!/bin/bash

      read a
      [ $a -eq 12 ]
      echo $?

      Linux13

    5. 复合测试:

      Linux14

      1
      2
      3
      4
      5
      #!/bin/bash

      read a
      [ $a -ge 10 -a $a -le 20 ]
      echo $?

      Linux15

      • -a、-o在测试中是过时的用法,某些 shell 可能不支持,推荐改用 &&([[]]) 、||
      • 如:[[ $val -ge 10 && $val -le 20 ]]
  2. 算术运算语法(()):

    1. 在 Shell 脚本中, (()) 是 Bash 和 Zsh 等现代 Shell 提供的算术运算语法,用于执行整数数学计算和算术条件判断。它的作用类似于 let 命令,但更简洁直观

    2. 支持 + - * / % ** ++ –(加、减、乘、除、取模、幂运算、自增、自减、比较运算符)

    3. 无需在变量前加 $(直接写变量名即可)

      Linux16

  3. 控制语句:

    1. if 语句:

      • 使用格式: if then elif else fi

      • 注意: if elif 与测试语句[]中间必须有一个空格

      • if 语句的结束为 fi

        1
        2
        3
        4
        5
        6
        7
        8
        if [ 条件 1 ]; then
        执行第一段程序
        elif [ 条件 2 ]; then
        执行第二段程序
        ……
        else
        执行其他可能程序
        fi
      • 注意:if 里面也可以继续嵌套 if 语句,但是要遵循固定格式

    2. case 语句:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      case $变量名称 in 

      “第一个变量内容” )
      程序段一
      ;;

      “第二个变量内容” )
      程序段二
      ;;

      *)

      其它程序段
      esac
    3. for 语句:

      1
      2
      3
      4
      5
      6
      for (( 初始值; 限制值; 执行步阶 )) 
      do

      程序段

      done
      • 初始值:变量在循环中的起始值
      • 限制值:当变量值在这个限制范围内时,就继续进行循环
      • 执行步阶:每作一次循环时,变量的变化量
    4. while 语句:

      • 当判断条件成立的时候进入 while 循环,直到判断条件不成立时才退出循环

        1
        2
        3
        4
        5
        6
        while [ 判断条件 ]
        do

        程序段

        done
    5. until 语句:

      • 与 while 恰恰相反,当 condition 成立的时候退出循环,否则继续循环

        1
        2
        3
        4
        5
        6
        until [ condition ]
        do

        程序段

        done
    6. break 与 continue 语句:

      1. 和 C 语言用法一样
      2. break 命令允许跳出循环,通常在进行一些处理后退出循环或 case 语句
      3. continue 命令类似于 break 命令,它不会跳出整个循环,只是跳过当前这一次循环

Shell 函数:

  • shell 允许将一组命令集或语句形成一个可用块,这些块称为 shell 函数
1
2
3
function 函数名() {
命令
}
  • 所有函数在使用前必须定义,必须将函数放在脚本开始部分,直至 shell 解释器首次发现它时,才可以使用
  • 函数调用格式:函数名 参数(函数名后面跟着要传入的参数)
  • 函数的返回值:
    • 函数也可以使用 return 提前结束并带回返回值
    • return 从函数中返回,用最后状态命令决定返回值
    • 在函数调用完成后,使用 $? 接收返回值

参考链接: