Shell 是一个用 C 语言编写的程序,一般我们说的shell编程,是指编写shell脚本。
Shell 负责完成用户与内核之间的交互(shell是一个命令解释器,负责将用户的命令解析成操作系
统所能理解的指令)

说明性语句:
以#号开始到该行结束,不被解释执行
功能性语句:
任意的shell命令、用户程序或其它shell程序。
结构性语句:
条件测试语句、多路分支语句、循环语句、循环控制语句等。
创建一个shell脚本–test.sh
#! /bin/sh
echo "hello world"
echo "hello world"很简单就是输出字符串hello world
#! /bin/bash -->告诉操作系统用哪种类型的shell来解释执行该程序
如何执行改脚本,创建test.sh是个普通文件,使用ls -l可以查看,该文件没有可执行权限,使用
chmod u+x test.sh,给脚本添加上可执行权限。
ghost-linux@ghost-linux:~/shell$ ./test.sh
hello world
echo string
echo 是shell中用于输出的指令
如果需要转义,可以加上-e选项;用-n选项来禁止echo命令输出后换行

read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量
read varible1 varible2 ...


read -a 读入一个数组
例:
read -a array #读入一串数字作为数组array的元素
echo ${#array[@]} #计算这个数组中有多少个元素
echo ${array[@]} #打印这个数组中所有的元素
echo ${array[2]} #打印这个数组中下标为2的元素
read -p 在输入时打印提示语句
例:read -p “Enter aa bb:” aa bb
cmd1 | cmd2
管道就是将一个命令cmd1的输出当做输入传给另一个命令cmd2。
|是管道符号
一般情况下,管道后面的操作都是查找grep、切割awk或替换seb

系统已经定义的文件描述符
重定向命令
| 命令 | 作用 |
|---|---|
| cmd > file | 将cmd重定向到file |
| cmd >> file | 将cmd重定向追加到file |
| m <& n | 将文件描述符n输入重定向到m |
| m >& n | 将文件描述符m输出重定向到n |
| cmd < file | 将file作为输入给cmd |
| cmd << deli | 从标准输入中读入,直至遇到deli分界符 |
| cmd > file 2>&1 | 把标准输出和标准错误一起重定向到file中 |


exec执行shell命令
操作文件描述符
使用exec创建的文件描述符重定向,是永久有效,直到显示取消重定向,可以看下面例子
#! /bin/bash
echo "input 6<&0 name ouput to stdout"
exec 6<&0 0<name
read var
read var1
echo $var
echo $var1
echo "close fd--6"
exec 0<&6 6<&-
echo -n "read from stdin:"
read num
echo "num = $num"
echo "test over" >> name
echo this is file name:
cat name
echo "redirect stdout to exec.log"
exec 1>exec.log
wc -l name
echo "redirect stdout to stderr"
exec 1>&2
echo "redirect stdout to stderr over"
wc -l name
echo "ouput exec.log"
cat exec.log
