在工作的时候接触到了shell脚本,不过我没有自己写过,但是又因为当时对shell有了兴趣,所以我就抽了一点时间,来学习shell脚本的语法结构,这里只是基本的shell语法,更高深的在以后可能会接触。
一 shell分类
1) Bourne家族:sh, bash(标准shell), pshell, zshell
2) C shell家族:cshell, tcshell
不同的shell之间可以进行切换,只要在当前的命令界面输入shell的名字如bash,csh等
二 shell输出命令
echo [选项] [输出内容]
选项:
-e 支持在输出内容的转义符
在这里只列举常见的转义符:
\\ 输出\本身
\a 警告音
\b 退格键,也就是说向左删除键
\n 换行符
\r 回车键
\0nnn 按照八进制ASCII码表输出字符,其中0为数字0,nnn是三位八进制数
\xhh 按照十六进制ASCII码表输出字符,其中hh是两位十六进制数
eg:
echo "hello world!"---->不会换行
echo -e "hello world!\n"---->会换行
三 命令别名
设定别名 alias 别名='原命令'
查询别名 alias
让别名永久生效,在相应的用户名下的.bashrc写下别名
删除别名 unalias
四 bash常用快捷键
ctrl+c 强制终止当前的命令
ctrl+l 清屏,相当于clear命令
ctrl+u 删除或剪切光标之前的内容
ctrl+y 粘贴ctrl+u操作的内容
ctrl+r 在历史命令中搜索
ctrl+d 退出当前终端
五 输出重定向
标准输出重定向:
命令 > 文件---->以覆盖的方式文件
命令 >> 文件---->以追加的方式写入文件
eg:
ls > 1.txt---->将当前目录中的目录名字一行一行的写入到1.txt文件中,是以覆盖的方式写入的。
ls >> 1.txt---->将当前目录中的目录名字一行一行的写入到1.txt文件中,是以追加的方式写入的。
标准错误输出重定向:
错误命令 2> 文件 以覆盖的方式文件
错误命令 2>> 文件 以追加的方式写入文件
这个错误的命令不是linux的系统的命令
eg:
c 2> 1---->c肯定不是系统的命令,这样就把出错的原因写到文件1中
正确输出和错误输出同时保存:
命令 > 文件 2>&1 或者 命令 &> 文件 以覆盖的方式,把正确和错误的输出结果都保存在同一个文件当中
命令 >> 文件 2>&1 或者 命令 &>> 文件 以追加的方式,把正确和错误的输出结果都保存在同一个文件当中
命令 >> 文件1 2>> 文件2 把正确的输出追加到文件1,把错误的输出追加到文件2中
六 输入重定向
wc [选项] [文件名]
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
八 grep 命令
grep [选项] “搜索内容” 文件名
选项:
-i ---->忽略大小写
-n---->输出行号
-v---->反向查找
-r---->可以通过目录进行查找
--color=auto---->搜索出的关键字用颜色显示
九 环境变量
export 变量名=变量值---->设置环境变量
env---->查询变量
unset 变量名----> 删除变量
十 接收键盘输入的命令
read [选项] [变量名]
选项:
-p “提示信息” 在等待read输入时,输出提示信息
-t 秒数 read命令会一直等待用户输入,使用此选项可以指定等待时间,时间一到就会结束运行
-n 字节数 read命令只接受指定的字节数,就会执行
-s 隐藏输入的数据,适用于机密信息的输入
十一 shell的特殊变量
$0 当前脚本文件名
$n 传递给脚本或函数的参数。 n 是一个数字,表示有几个参数。例如第一个参数是$1,第二个参数是$2
$# 传递给脚本或函数的参数个数
$* 传递给脚本或函数的所有参数
$@ 传递给脚本或函数的所有参数,被双引号(" ")包含时,与$*稍有不同
$? 上个命令的退出状态,或函数的返回值
$$ 当前shell进程ID
十二 shell的运算符
关系运算符
-eq 检测两个数是否相等,相等返回true。
-ne 检测两个数是否相等,不相等返回true。
-gt 检测左边的数是否大于右边的数,如果是,则返回true。
-lt 检测左边的数是否小于右边的数,如果是,则返回true。
-ge 检测左边的数时候大于或等于右边的数,如果是,则返回true。
-le 检测左边的数是否小于或等于右边的数,如果是,则返回true。
字符串运算
= 检测两个字符串是否相等,相等返回true。
!= 检测两个字符串是否相等,不相等返回false。
-z 检测字符串长度是否为0,为0返回true。
-n 检测字符串长度是否为0,不为0返回true。
str 检测字符串是否为空,不为空返回true。
文件测试运算
-b file 检测文件是否块设备文件,如果是,则返回true
-c file 检测文件是否字符设备文件,如果是,则返回true
-d file 检测文件是否是目录,如果是,则返回true
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true
-g file 检测文件是否设置了SGID位,如果是,则返回true
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回true
-p file 检测文件是否是命名管道,如果是,则返回true
-u file 检测文件是否设置了SUID位,如果是,则返回true
-r file 检测文件是否可读,如果是,则返回true
-w file 检测文件是否可写,如果是,则返回true
-x file 检测文件是否可执行,如果是,则返回true
-s file 检测文件是否为空(文件大小是否大于0),不为空,则返回true
-e file 检测文件(包括目录)是否存在,如果是,则返回true