云计算百科
云计算领域专业知识百科平台

shell光速入门笔记

shell学习笔记-bash

  • 学习视频链接:【30分钟Shell光速入门教程】 https://www.bilibili.com/video/BV17m411U7cC/?share_source=copy_web&vd_source=fb850db820b823205dfea926dc8f484d
  • github笔记地址:https://github.com/anwei85/study_note

一、shell简介

1.shell基本知识

  • shell的定义
    shell是一个命令行解释器。
    负责接收用户输入的命令,然后调用操作系统的内核去执行这些命令,再把执行的结果返回给用户。
    在这里插入图片描述

  • shell的分类:
    通常分为如下几种
    在这里插入图片描述
    此外,windows系统上也有微软自己的命令提示符:power shell

  • shell-bash环境

  • WSL安装LINUX
  • 虚拟机安装LINUX
  • git右键bash运行–只能执行较为简单的命令
  • 基本命令

  • cat /etc/shells 查看系统的所有shell版本
  • echo $shell 确认当前系统使用的哪个shell版本
  • 其他常用环境变量(前加echo和$):

    home存储当前用户的家目录
    path存储系统的查找路径

  • echo $0 来查看当前执行脚本的名称
  • 两者不同,当切换到其他shell版本时,系统$shell不会发生变化,而另一个会跟着切换显示出的版本

    直接输入脚本的路径即可切换到该版本,退出输入$exit

  • 基础脚本文件

    • 后缀一般为 .sh,但可以写成任何其他的,甚至没有也可以
    • 第一行一般为#!/bin/bash,解释这是什么解释器,后面为查到的解释器的路径
    • 文件中命令会依次执行
  • 在命令行中,chmod +x 文件名 赋予文件可执行的权限
  • 在命令行中, ./文件名或bash 文件名 执行文件

    bash执行不需要添加权限,./需要添加权限

  • 特殊变量(前都有$)
    #——传递给脚本或函数的位置参数的个数
    ?——上一个命令的退出状态。0表示没有错误,非0值表示有错误
    *——传递给脚本或函数的位置参数,双引号包围时作为一个整体
    @——传递给脚本或函数的位置参数
    (两个美元符号)——当前shell进程的进程id(PID)
    0——当前脚本的名称
    1-n——脚本或函数的位置参数

  • 二、实操案例

    运行文件前先进入文件所处目录,如cd “/d/400 Tech stack/440 Study Notes/5、Linux/shell”

    例1–hello .sh:

    #!/bin/bash
    echo "Hello Wolrd "
    #输出对应内容
    date
    #输出日期
    whoami
    #输出用户名

    在这里插入图片描述

    例2–game .sh:

    #!/bin/bash
    echo "请输入您的姓名:"
    read name
    #读取用户输入
    echo "您好 $name"
    #变量前用$符号

    在这里插入图片描述

    例3–game .sh:

    参数来给脚本传递信息,常见于无法交互式输入的情况下

    可以直接在执行命令后输入值,也可以在命令行中利用export定义环境变量来进行赋值

    仅有效一次对话框,exit退出重进后,设定的变量就会失效
    圈出的两个文件夹都是存放环境变量的,如果想继续使用变量设定,可以将文件放置.bashrc下
    在这里插入图片描述

    #!/bin/bash
    echo "请输入您的姓名:"
    #read name
    #读取用户输入
    name=$1
    channel=$2
    echo "您好 $name,欢迎来到$channel"
    #变量前用$符号

    在这里插入图片描述

    #!/bin/bash
    echo "请输入您的姓名:"
    #read name
    #读取用户输入
    #name=$1
    #channel=$2
    echo "您好 $name,欢迎来到$channel"
    #变量前用$符号

    在这里插入图片描述

    例4–game .sh
    加入正确提示

    echo "您好 $name,欢迎来到$channel"
    # 变量前用$符号
    number=$(shuf -i 1-10 -n 1)
    #i 范围,n 个数;命令赋值给变量需要加$()
    echo $number
    echo "请输入一个1-10之间的数字"
    read guess
    if [ "$guess" -eq "$number" ]; then
    #-eq 是相等的意思
    echo "猜对了"
    fi
    #可以加[],[[]]或(());分别为基本,扩展和数学表达式;三行为一个完整的条件判断

    在这里插入图片描述

    加入错误提示

    #!/bin/bash
    echo "您好 $name,欢迎来到$channel"
    number=$(shuf -i 1-10 -n 1)
    echo $number
    echo "请输入一个1-10之间的数字"
    read guess
    if [ "$guess" -eq "$number" ]; then
    echo "猜对了"
    else
    echo "猜错了"
    fi

    在这里插入图片描述

    加入辅助提示

    #!/bin/bash
    echo "您好 $name,欢迎来到$channel"
    number=$(shuf -i 1-10 -n 1)
    echo $number
    echo "请输入一个1-10之间的数字"
    read guess
    if [ "$guess" -eq "$number" ]; then
    echo "猜对了"
    elif [ "$guess" -lt "$number" ]; then
    echo "猜小了"
    else
    echo "猜大了"
    fi
    #-lt 小于,-gt大于

    在这里插入图片描述

    加入循环,让游戏可以多运行几轮,只到猜中为止

    for循环–遍历列表和数组;while循环–在条件成立的情况下一直执行

    #!/bin/bash
    echo "您好 $name,欢迎来到$channel"
    number=$(shuf -i 1-10 -n 1)
    echo $number
    while [[ "$guess" -ne "$number" ]]
    do
    echo "请输入一个1-10之间的数字"
    read guess
    if [[ "$guess" -eq "$number" ]]; then
    echo "猜对了"
    elif [[ "$guess" -lt "$number" ]]; then
    #-lt 小于,-gt大于
    echo "猜小了"
    else
    echo "猜大了"
    fi
    done

    在这里插入图片描述

    加入用户自主选择是否结束

    break 结束循环;continue 跳过当前循环

    #!/bin/bash
    echo "您好 $name,欢迎来到$channel"
    number=$(shuf -i 1-10 -n 1)
    echo $number
    while true
    do
    echo "请输入一个1-10之间的数字"
    read guess
    if [[ "$guess" -eq "$number" ]]; then
    echo "猜对了!是否继续游玩(y/n):"
    read choice
    if [[ "$choice" = "y" ]] || [[ "$choice" = "Y" ]];then
    # ||表示或者
    number=$((RANDOM % 10 + 1))
    echo $number
    #生成1-10的随机数,不加1是0-9
    continue
    else
    break
    fi
    elif [[ "$guess" -lt "$number" ]]; then
    #-lt 小于,-gt大于;比较整数用-eq。比较字符串用=
    echo "猜小了"
    else
    echo "猜大了"
    fi
    done

    在这里插入图片描述

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » shell光速入门笔记
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!