今天是参加笔记活动的的第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
fi
echo "[${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脚本和编程(三) | 青训营笔记