LinuxShell编程

2023年 10月 11日 63.3k 0

1. 什么是 shell?

shell 是一个程序,采用 c 语言进行编写的,是用户和 linux 内核沟通的桥梁。它既是一种命令语言,又是一种解释性的编程语言。

image-20230422164020393

  • kernel:为软件服务,接受用户或者软件指令驱动硬件,完成工作
  • shell:命令解释器
  • user:用户接口,对接用户

shell 脚本就是将完成一个任务的所有命令按照执行的先后顺序,自上而下写入到一个文本文件中,然后给予执行的权限。

2. shell 基础用法

2.1 如何书写一个 shell 脚本

  • shell 脚本命名

    命名要做到见明知意,比如:check_memory.sh,检查内存的脚本

    虽然 linux 系统中,文件没有扩展名的概念,但是建议使用 .sh 结尾

  • shell 脚本格式

    shell 脚本开头必须指定脚本运行环境以 #! (特例)符合组合来组成。比如:#!/bin/bash 指定该脚本的运行解析是由 /bin/bash 来完成

  • 脚本组成

  • #1. 解释环境
        #!/usr/bin/env bash | python | perl
    #2. 注释说明
        # Author: name
        # CreateTime: 2023-04-22 17:07
        # Description: 描述信息
    #3. 执行代码
    

    2.2 如何运行 shell 脚本

  • 给脚本文件赋予执行权限后该脚本即可运行
  • chmod u+x filename
    
  • 如果不赋予执行权限,可以使用 bash 命令来运行未赋予执行权限的脚本
  • bash filename
    

    2.3 shell 中的特殊符号

    ~:      家目录  cd~代表进入用户家目录
    !:      执行历史命令  !! 执行上一条命令
    $:      变量中取内容符
    + - * / %: 对应数学运算 加 减 乘 除 取余
    &:      后台执行
    *:      shell 中的通配符,匹配所有
    ?:      shell 中的通配符,匹配除回车以外的一个字符
    ;:      分号可以在shell 中一行执行多个命令,命令之间用分号分隔
    |:      管道符,上一个命令的输出作为下一个命令的输入  cat filename | grep "abc"
    :      转义字符
    ``:     反引号,命令中执行命令  echo "today is `date + %F`"
    '':     单引号,脚本中字符串要用单引号引起来,但是不同于双引号的是,单引号不解释变量
    "":     双引号,脚本中出现的字符串可以用双引号引起来
    

    2.4 shell 重定向

    > 重定向输入 覆盖原有数据
    >> 重定向追加输入,在原数据的末尾添加
    < 重定向输出  wc -l < /etc/passwd
     10 ));
        then
            echo "yes"
    else
            echo "no"
    fi
    
  • 使用双方括号可以在条件中使用通配符
  • #!/bin/bash
    if [[ "aa" == aa*  ]]
        then
            echo "yes"
    else
            echo "no"
    fi
    

    7.3 for

    7.3.1 语法一
    for var in value1 value2 value3 ...
        do
        	commands
    done
    
    #!/bin/bash
    for var in value1 value2 value3 value4
        do
            echo "输出:$var"
    done
    
    #!/bin/bash
    for i in `seq 1 9`
        do
            echo "输出:$i"
    done
    
    #!/bin/bash
    for i in `seq 9 -1 1`
        do
            echo "输出:$i"
    done
    
    7.3.2 语法二
    for ((变量;条件;自增减运算))
    	do
    		commands
    done
    
    #!/bin/bash
    for ((i=1;i/home/null
            if [ $? -eq 0 ]
                then
                    echo "`date +"%F %H:%M:%S"`: $1 is UP"
            else
                    echo "`date +"%F %H:%M:%S"`: $1 is DOWN"
            fi
            # 脚本节奏控制,每隔5s执行一次
            sleep 5
    done
    
    7.4.2 continue

    跳过循环中的某次循环

    #!/bin/bash
    for (( i=1;i >= ==  5{print $0}' num
    6
    7
    8
    9
    10
    [root@localhost shell]# awk '$1 == 5{print $0}' num
    5
    [root@localhost shell]# awk 'BEGIN{print 1 + 1}'
    2
    [root@localhost shell]# awk 'BEGIN{print 1 * 2}'
    2
    [root@localhost shell]# awk 'BEGIN{print 1 - 2}'
    -1
    [root@localhost shell]# awk 'BEGIN{print 1 / 2}'
    0.5
    

    逻辑运算

    [root@localhost shell]# awk 'BEGIN{print 1 >= 2 && 1 = 2 && 1 = 2 || 1 = 2 || 1 5) print $0}' num
    6
    7
    8
    9
    10
    [root@localhost shell]# awk '{if($1 % 2 != 0) print $1" jishu" ;else print $1" ou"}' num
    1 jishu
    2 ou
    3 jishu
    4 ou
    5 jishu
    6 ou
    7 jishu
    8 ou
    9 jishu
    10 ou
    
    # -v 指定变量和默认值
    [root@localhost shell]# awk -v sum=0 '{sum+=$1}END{print sum}' num
    55

    [root@localhost shell]# cat num2
    1 2 3
    4 5 6
    7 8 9
    # 每行累加并输出 for
    [root@localhost shell]# awk '{sum=0;for(i=1;i

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论