Shell脚本和编程(四) | 青训营笔记

81 阅读1分钟

今天是参加笔记活动的的第11

输入重定向符号

<

<<

每个 shell 命令在执行时都会打开三个文件描述符, 文件描述符0、1、2, 分别对应 stdin、stdout、stderr, 这三个文件描述符默认默认指向 终端输入、终端输出,那么当命令需要获取输入的时候,它会去读取 fd0, 当要输出的时候它会像 fd1、fd2写入, 改变这些描述符指向的行为叫做重定向 2>&1 必须写在 > 之后 << 比较特殊, 表示继续沿用当前的标准输入, 只是当识别到指定的标识符后停止, 将接收到的内容作为 stdin 实例: 用户在命令行输入内容,当输入 EOF 的时候停止, 所输入的内容写入 foo.txt

判断命令

shell中提供了test,[,[[三种判断符号,可用于

  • 整数测试
  • 字符串测试
  • 文件测试

语法

  • test condition
  • [codition]
  • [[condition]]

注意

  • 中括号前后要有空格符
  • [和test是命令,只能使用自己支持的标志位,<,>,=只能用来比较字符串
  • 中括号内的变量,最好都是用引号括起来
  • [[更丰富,在整型比较中支持<,>,=,在字符串比较中支持=-正则

根据程序是否正常执行(程序退出的状态)进行判断 exit:手动退出 shell 的命令 exit 10 返回 10 给 shell,返回值非 0 为不正常退出 $? 用于判读昂当前 shell 前一个进程是否正常退出(非 0 为不正常退出)

分支语句

语法一

if condition;then
    程序段
elif condition;then
    程序段
else
    程序段
    fi
#!/bin/bash
​
level=0
​
if [ -n "$level "]; then
    if [ "$level" == 0 ]; then
        prefix=ERROR
    elif [ "$level" == 1 ]; then
        prefix=INFO
    else
        echo "log level not supported"
    fi
fiecho "[${prefix}] $message"

语法二

case $变量 in
    "第一个变量内容")
        程序段
        ;;
    "第一个变量内容")
        程序段
        ;;
        *)
        程序段
        ;;
    esac
#!/bin/bash
​
name=john
​
case $name in
    "nick")
        echo "hi nick"
    ;;
    "john")
        echo "my name is john"
    ;;
    *)
        echo "404"
    ;;
esac

循环

while循环

while condition;do 程序段;done

until循环

until condition;do程序段;done

for循环

for var in [words...];do 程序段; done

until 当条件成立的时候跳出循环# Shell脚本和编程(三) | 青训营笔记