Shell概述1
脚本文件内容(vim ex2)
#!/bin/bash
#If no arguments,then listing the current directory.
#Otherwise,listing each subdirectory.
if test $#=0
then ls .
else
for i
do
ls -l $i | grep '^d'
done
fi
#如果Shell脚本执行过程中没有参数,就列出当前工作目录的内容,如果有参数的话,就遍历参数,列出指定目录下的所有文件内容。
#后跟的内容为注释,#!/bin/bash例外,它表示当前脚本要要/bin/bash解释执行。
test后是测试条件,在Shell脚本中以$符号开始后面跟着的字符串通常都会被当做变量处理,#是一个特殊字符,一般表示数量,$#表示这个脚本执行过程中的参数个数。
无参数执行: ./ex2
有参数执行: /ex2 . ..
Shell预先定义的特殊变量及其含义
- $# 命令行上参数的个数,但不包含shell脚本名
- $? 上一条命令执行后的返回值
- $$ 当前进程的进程号
- $! 上一个后台命令对应的进程号
- $* 表示在命令行中实际给出的所有实参字符串
- $@ 它与$*基本功能相同
特殊字符
-
单引号
- 单引号里的都当做普通字符处理
-
双引号
-
除了"`","$","\" 外都当做普通字符处理;
-
"`"为命令替换(英文模式下TAB上面那个键),倒引号括起来的字符串会被shell解释为命令行
-
"$"为变量替换
-
"\"为转义
-
-
输入/输出重定向
-
输入重定向
bash < ex2 (用bash执行ex2命令)
-
输出重定向
who > w.txt(将who命令的结果直接输入到w.txt,如果w.txt之前存在内容,则会被覆盖)
who >> w.txt(将who命令的结果输入到w.txt原有内容之后)
-
-
注释
- 通常#后跟的即为注释
-
管道线
- 使用"|",管道线之前的命令结果作为管道线之后命令的输入
例:cat w.txt | wc -l(查看w.txt的内容并统计行数)
- 使用"|",管道线之前的命令结果作为管道线之后命令的输入
-
后台命令
- 使用"&",在需要后台执行的命令后跟&即可
例:apt-get update&
- 使用"&",在需要后台执行的命令后跟&即可