shell2.0
1. 脚本三种执行方式
① chmod a+x .文件名 ./文件名
② bash 文件名
③ source 文件名 或者 .文件名
2. 第一行指明了Shell脚本使用哪个Shell进行解释执行
#!/bin/bash
3. 单行注释 #
多行注释: << !
!
4. 用户帐号 /etc/passwd
用户密码 /etc/shadow
5. 命令
(1)ls
-a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)
-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r 将文件以相反次序显示(原定依英文字母次序)
-t 将文件依建立时间之先后次序列出
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加"/"
-R 若目录下有文件,则以下之文件亦皆依序列出
(2) cd
命令用于切换当前工作目录至 dirName(目录参数)。
另外,“回车”"~" 也表示为 home 目录的意思,"." 则是表示目前所在的目录,".." 则表示目前目录位置的上一层目录,“-”切换到上次工作目录
(3)touch
如果指定的文件不存在,则将创建一个新的空白文件
(4)mkdir 创建子目录
-p 确保目录名称存在,不存在的就建一个。
(5)rm 删除一个文件或目录
-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。
(6)rmdir 删除空目录
-p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。
(7)su 用户 切换用户
(8)tar 命令用于备份文件
tar-czvf test.tar.gz a.c //压缩 a.c文件为test.tar.gz
tar-tzvf test.tar.gz //列出压缩文件内容
tar-xzvf test.tar.gz a.c //解压文件
-c或--create 建立新的备份文件。
-z或--gzip或--ungzip 通过gzip指令处理备份文件。
-v或--verbose 显示指令执行过程。
-f<备份文件>或--file=<备份文件> 指定备份文件。
-t或--list 列出备份文件的内容。
-x或--extract或--get 从备份文件中还原文件。
(9)grep
(10)sed
在sed中需要用两根/(斜线)将规则括起来
sed -n ‘/^#/p’ /etc/rc.local
(11)awk
每条记录的域从1开始编号;$0表示所有域(行)
awk支持“?”和“+”两个扩展元字符。
命令语法:
awk '{pattern + action}' input-file
http://www.runoob.com/linux/linux-comm-awk.html
(12)sort
-b :忽略最前面的空格符部分;
-c:测试文件是否已经被排序
-f :忽略大小写的差异,例如A 与 a 视为编码相同;
-k :以某个区间 (field)字段键值(key)进行排序
-n :使用『纯数字』进行排序(默认是以ASCII码排序);
-u :去除重复行,(unique唯一的),相同的数据中,仅出现一行代表;*
-t :分隔符,默认是用 [tab] 键来分隔;*
-r :逆向排序;
-o 文件名:将排序后结果输出到文件;
(13)wc
wc(word count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。
-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与-c 标志一起使用。
-w 统计字数。
(14)uniq
-i :忽略大小写字符的不同;
-c :进行计数 ;
-d: 只显示重复记录,每个记录出现1次
-u :只显示唯一的行(非重复)*
(15)kill 终止后台进程
ctrl+c 终止前台进程
bg 前台转后台
fg 后台转前台
(16)cp
复制文件或目录
-a:该选项通常在复制目录时使用,递归地将源目录下的所有子目录及其文件都复制到目标目录,并且保留文件链接和文件属性不变,等效于-dpr(all)
-f:(force)强行复制文件或目录,不论目标文件或目录是否已存在。
-i:(interactive)覆盖既有文件之前先询问用户。
-p:保留源文件或目录的属性。
-r:递归处理,将指定目录下的文件与子目录一并处理。
rm删除文件或目录。
-f:(force)强制删除文件或目录
-r:(recursive)递归处理,将指定目录下的所有文件及子目录一并处理
-i:(interactive)删除既有文件或目录之前先询问用户
(17)mv
删除文件或目录
-i:覆盖前先行询问用户(interactive)
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录(force)
(18)重定向
http://www.runoob.com/linux/linux-shell-io-redirections.html
管道(连接两个进程)
(19)tab键 联想
5. vi的三种模式
http://www.runoob.com/linux/linux-vim.html
6. $?前面的变量
第一个参数用$1表示,第二个参数$2表示……以此类推。
注意:$0表示脚本文件名。
另外一个在shell编程中经常用到 的是“[email protected]”这个代表所有的参数,可以用一个循环来遍历这个参数。for args in [email protected]
$# 参数数量 $* 传递所有前面的参数组成的字符串
7. *、?、+ 在正则表达式中代表什么?
*,它用来匹配任何字符串,包括空串
?,它用来匹配任意一个字符,0次或1次
+ 前面字符至少出现一次
[],它用来匹配方括号内里列出的某个单个字符
8. 文件类型
9. 循环
1)if语句
①if [ 条件命令 ]
then
命令1
命令2
…
fi
②if…else…fi结构
if [ 条件命令 ]; then
命令列表1
else
命令列表2
fi
③if…elif…fi结构
if [ 条件命令1 ];then
命令列表1
elif [ 条件命令2 ]; then
命令列表2
else
命令列表3
fi
④嵌套的if语句
if [ 条件命令1 ];then
if [ 条件命令2 ];then
命令列表1
else
命令列表2
fi
else
命令列表3
fi
2)case
case 变量值 in
模式1)
命令列表1;;
模式2)
命令列表2;;
……
*)
命令列表n;;
esac
3)for循环
①for 变量 in {字符串列表list }
do
命令列表
done
②for 变量
do
命令列表
done
③for ((表达式1;表达式2;表达式3))
do
命令列表
done
4)while循环
10. 环境变量 echo
$PATH规定了一个命令执行时所搜寻的路径
$PWD当前工作目录的绝对路径名
$USER当前登录用户
$LOG_NAME登录名
$HOME 用于保存注册目录的全部路径名
11. 动态显示进程 top
静态 ps
12. Linux命令提示符 # 超级用户 $非超级用户
13. { 前后的空格