• shell编程


    shell脚本的第一行

    一般shell脚本的第一行用于在没有指定解释器时,默认使用这个解释器执行
    如,默认使用Bash解释器来执行这个脚本

    #!/bin/bash
    
    • 1

    如果安装了python3,想写一个py文件并执行:
    在这里插入图片描述
    这里的第一行就写python3命令的所在目录,并给他加上可执行权限,这与指定了解释器执行是一样的

    变量

    shell变量使用需要在变量前面加一个$符号

    位置变量: $1-$9 分别代表参数列表中的第1-9个参数

    预定义变量 : 系统预留的一些变量
    $0:当前进程或者脚本名称
    $!:后台运行的最后一个进程的pid号
    $?:上一条命令程序返回值
    $*:代表所有参数内容
    $$:表示当前进程的pid号
    $#:表示参数个数
    $@:代表所有参数(逐个获取)
    在这里插入图片描述

    使用双引号可以解析变量,使用单引号会原样输出

    在这里插入图片描述

    数据类型

    shell中默认的数据类型是字符串

    Linux下的计算器 – bc

    在这里插入图片描述
    bc进行数值大小的判断结果:判断结果为真就返回1,结果为假就返回0

    整数数值的运算

    三种表示方法:

    • $(( 表达式 ))
    • $[ 表达式 ]
    • expr 表达式
      在这里插入图片描述
      注意空格!

    表示1到9:

    • {1…9}
      • for i in {1…9}
    • seq
      • for i in `seq9`
      • 输出0到10的偶数 seq 0 2 10
      • 等宽位输出,高位用0补齐seq -w 0 2 10

    在这里插入图片描述

    获得命令的输出结果

    ``或$()
    在这里插入图片描述

    字符串操作

    [root@localhost shell_script]# line=`head -n1 /etc/passwd`
    [root@localhost shell_script]# echo $line
    root:x:0:0:root:/root:/bin/bash
    
    字符串长度
    [root@localhost shell_script]# echo ${#line}
    31
    
    截取前4个字符
    [root@localhost shell_script]# echo ${line:0:4}
    root
    
    截取后9个字符
    [root@localhost shell_script]# echo ${line:0-9}
    /bin/bash
    
    从倒数第九个字符开始截取4个字符
    [root@localhost shell_script]# echo ${line:0-9:4}
    /bin
    
    从左向右截取最后一个:后的字符
    [root@localhost shell_script]# echo ${line##*:}
    /bin/bash
    
    从左向右截取第一个:后的字符
    [root@localhost shell_script]# echo ${line#*:}
    x:0:0:root:/root:/bin/bash
    
    从右向左截取最后一个:后的字符
    [root@localhost shell_script]# echo ${line%%:*}
    root
    
    从右向左截取第一个:后的字符
    [root@localhost shell_script]# echo ${line%:*}
    root:x:0:0:root:/root
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    数组

    定义: 使用圆括号,之间以空格分隔

    [root@localhost shell_script]# a=(1 2 3 4 5)
    
    输出数组所有元素
    [root@localhost shell_script]# echo ${a[@]}
    1 2 3 4 5
    
    按下标输出
    [root@localhost shell_script]# echo ${a[1]}
    2
    
    数组长度
    [root@localhost shell_script]# echo ${#a[*]}
    5
    
    截取
    [root@localhost shell_script]# echo ${a[*]:1:2}
    2 3
    
    删除元素,但其他元素的下标不会变
    [root@localhost shell_script]# unset a[2]
    [root@localhost shell_script]# echo ${a[@]}
    1 2 4 5
    [root@localhost shell_script]# echo ${a[2]}
    
    [root@localhost shell_script]# echo ${a[3]}
    4
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    for循环中一次取出数组的元素:for i in ${a[@]}

    循环

    for

    第一种方式:

    for 变量 in 值1 值2
    do
    	循环语句
    done
    
    • 1
    • 2
    • 3
    • 4

    第二种方式:

    for ((初始化变量;结束循环的条件;运算))
    do
    	循环执行的语句
    done
    
    • 1
    • 2
    • 3
    • 4

    while

    while 条件
    do
    	执行循环语句
    done
    
    • 1
    • 2
    • 3
    • 4

    也支持break,continue

    判断

    []、[[]]、(())都可以用于判断
    (())整数值的判断
    []判断字符串的过程中,如果有空白字符,他会进行分词
    [[]]不会进行分词,建议使用[[]]进行判断

    [ ]表示条件测试。注意这里的空格很重要。要注意在’[‘后面和’]'前面都必须要有空格。

    语法:

    if [ command ];then
        符合该条件执行的语句
    elif [ command ];then
        符合该条件执行的语句
    else
        符合该条件执行的语句
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 常用判断
      [ -d FILE ] 如果 FILE 存在且是一个目录则返回为真。
      [ -f FILE ] 如果 FILE 存在且是一个普通文件则返回为真。

    • 字符串判断
      [ -z STRING ] 如果STRING的长度为零则返回为真,即空是真
      [ -n STRING ] 如果STRING的长度非零则返回为真,即非空是真
      [ STRING1 ]  如果字符串不为空则返回为真,与-n类似
      [ STRING1 == STRING2 ] 如果两个字符串相同则返回为真
      [ STRING1 != STRING2 ] 如果字符串不相同则返回为真
      [ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面则返回为真。
      [ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”后面则返回为真。

    • 数值判断
      [ INT1 -eq INT2 ] INT1和INT2两数相等返回为真 ,=
      [ INT1 -ne INT2 ] INT1和INT2两数不等返回为真 ,<>
      [ INT1 -gt INT2 ] INT1大于INT2返回为真 ,>
      [ INT1 -ge INT2 ] INT1大于等于INT2返回为真,>=
      [ INT1 -lt INT2 ] INT1小于INT2返回为真 ,<
      [ INT1 -le INT2 ] INT1小于等于INT2返回为真,<

    • 逻辑判断
      [ ! EXPR ] 逻辑非,如果 EXPR 是false则返回为真。
      [ EXPR1 -a EXPR2 ] 逻辑与,如果 EXPR1 and EXPR2 全真则返回为真。
      [ EXPR1 -o EXPR2 ] 逻辑或,如果 EXPR1 或者 EXPR2 为真则返回为真。
      [ ] || [ ] 用OR来合并两个条件
      [ ] && [ ] 用AND来合并两个条件

    • 类似python的逻辑短路运算
      cmd1 && cmd2 如果cmd1执行成功,或者为真,则执行cmd2
      cmd1 || cmd2 如果cmd1执行不成功,或者为假,则执行cmd2
      cmd1 && cmd2 || cmd3 如果cmd执行成功,就执行cmd2,不成功就执行cmd3

    case语句

    case $变量名 in
    条件1)
    	执行语句一
    	;;
    条件2)
    	执行语句二
    	;;
    *)
    执行语句三
    esac
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    函数

    定义: 可以用function定义,也可以不使用

    a() {
    
    }
    或
    function a() {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    调用: 直接用函数名调用 a
    如果要接参数: a $1

  • 相关阅读:
    软考 系统架构设计师系列知识点之软件可靠性基础知识(4)
    北京化工大学数据结构2022/11/3作业 题解
    基于Android studio师生学习交流平台
    互联网技术岗笔试基础题目练习①
    【状语从句练习题】综合训练
    php字符串的截取方式
    构建汛期智慧水利新生态:EasyCVR视频汇聚监控综合管理方案解析
    Docker-CentOS开启防火墙firewalled映射Docker端口
    【毕业设计】基于ESP32的在线墨水屏桌面摆件 -物联网 单片机 嵌入式
    python学习--os模块常用函数
  • 原文地址:https://blog.csdn.net/qq_45742976/article/details/132888348