Shell书籍资料
1.[高级Bash脚本编程指南》Revision 10中文版](https://imcmy.gitbooks.io/advanced-bash-scripting-guide-in-chinese/content/\)
2.[修订中文版本](http://www.linuxplus.org/kb/\)
3.[pdf](http://download.csdn.net/detail/loveofmaster/3869902\) 及[读书笔记](http://www.pythoner.com/122.html\)
4.[Linux命令大全/Bash](http://www.linuxplus.org/kb/cmdindex.html\)
5.Awesome Shell
常用命令
本地文本编辑
o nano $filename
ctrl + o 保存
ctrl + x 退出
o vi
o vim $filename
移动:kljh(上右下左)
插入:ioIOaA
离开编辑状态:按esc
保存::w
退出::q
保存并退出::wq 或者 shift+z+z
复制:yy
粘贴:pP
删除行:dd
向后出单词:dw
向前删除单词:db
o echo
o touch
o >
o >>
o 查看文本内容
cat
less
more
head
tail
• 文件相关
o ls -alhtr
o find /tmp -name *.php
o 文件属性/属主
chmod 600 ~/.ssh/test_rsa
chown vagrant:vagrant ~/.ssh/test_rsa
o 创建目录
mkdir /tmp/test
mkdir -p /tmp/x/y
o 删除目录
rm -rf /tmp/x
o 改名/移动
mv /tmp/a /tmp/b
• 查找定位命令、文件
o whereis git # /usr/bin/git
o which git # /usr/local/bin/git
o type git # git is hashed (/usr/local/bin/git)
o locate git # N 多文件
o find
• sed # 文本流或字符串处理
• awk # 独立命令语言
• 时间/日期
o date
o time # 用来计时
• 网络
o ifconfig
ifdown
ifup
ip
o ping
o traceroute
o dig
o whois
o nslookup
o ss
o netstat
o ip
• 下载网络文件
o curl -o x.txt http://domain/x.txt
o wget -O x.txt http://domain/x.txt
• 发邮件
o mail
例子:echo 'email content' | mail -s 'email title' [email protected]
o mutt(可以发送附件)
例子:echo 'email content' | mutt -s 'email title' [email protected] -a $attachment_filename
• 逻辑、流程处理
o seq
o while
o if
• 多窗口工具
o screen
o tmux
• 其他
o history # 查看历史命令
o !123 # 再次执行第123个命令,123这个编号通过history命令可以看到
o ctrl + r # 输入并匹配历史命令,可以直接或者修改执行
o top
o ps -aux | grep php
o ps -ef | grep nginx
•
tree
o tree
o tree /tmp
o tree -d # 只显示目录
o tree -L 2 # 最多显示两级
o tree -f # 显示完整路径
o tree -P *php # 目录匹配,只显示文件名以php结尾的文件
•
注意shell内部变量的特殊使用方式:
表示方法 描述
$n $1 表示第一个参数,$2 表示第二个参数 ...
$# 命令行参数的个数
$0 当前程序的名称
$? 前一个命令或函数的返回码
$* 以"参数1 参数2 ... " 形式保存所有参数,使用时需要引号"$*"
$@ 以"参数1" "参数2" ... 形式保存所有参数,使用时需要引号"$@"
$$ 本程序的(进程ID号)PID
________________________________________
命令学了不少了,接下来我们开始写脚本
## 基础:
# Sha-bang 形式和作用
#! /bin/bash # debian/ubuntu系列
#!/bin/bash # redhat系列及其他
#! /usr/bin/env python # 使用 "#!/usr/bin/env 脚本解释器名称" 是一种常见的在不同平台上都能正确找到解释器的办法。
#! /usr/local/bin/php
#!/usr/bin/perl -w
* 如果没指定,则使用默认 $SHELL 变量的值指定的shell去执行
* 不要指定一个不存在的可执行文件,如下
$ cat d.sh
#! /bin/bashx
ls
$ ./d.sh
-su: ./d.sh: /bin/bashx: bad interpreter: No such file or directory