shell 简介
Shell 是一个用 C 语言编写的程序,一般我们说的shell编程,是指编写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
echo string
echo
是shell中用于输出的指令
如果需要转义,可以加上-e
选项;用-n
选项来禁止echo命令输出后换行
read
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
重定向
-
系统已经定义的文件描述符
- 标准输入:0
- 标准输出:1
- 标准错误:2
-
重定向命令
命令 作用 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
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