一、文件的处理
读、写、可执行(指其是一个shell脚本或程序)
文件属主(创建文件的用户)、同组用户(和创建用户同一个组的用户)、其他用户(不属于前两个组的用户)
常用命令:
【ls -l】 d--目录,l--符号链接,s--套接字文件,b--块设备文件,c--字符设备文件,p--命名管道,- 代表其他类型文件
一个块为512个字节。
【touch file】可用于创建新文件
【chmod (ugoa) (+-=) (rwxstl) file】修改文件权限
【chmod 664 filename】
【umask】命令设置缺省权限,mask表示屏蔽某位的意思
【ln -s sourcepath targetpath】创建链接文件
二、查找
【find pathname -options [-print -exec -ok]】
Options:
-name
-perm
-prune
-user
-group
-mtime -n +n
-newer file1!file2
-type
-depth
-size +10
xargs 常与find一起用,用于一条条处理数据。
三、后台执行命令
cron是系统调度进程
每个用户可以有一个 crontab 文件来保存调度信息
at 命令提交给 cron 进行调度
CCC:命令 & --》将命令放在后台执行
CCC:nohup command & --》表示用户推出时,进程仍然可以继续运行
四、Shell输入输出
1、echo
2、read 从键盘或文件的某一行文本中读入信息,并将其赋值给一个变量
3、cat 显示文件内容、创建文件、显示控制字符(cat -v)
4、管道 (|)
5、tee 将输出同时输出到标准输出和文件
6、标准输入的文件描述符为0
标准输出的文件描述符为1
标准错误的文件描述符为2
另外:3~9是可以任意使用的,可以用于循环
7、对标准错误进行重定向时,必须要使用文件描述符
command > filename 2>&1 将标准输出和错误一起重定向到文件中
8、exec命令可以用来替代当前shell
例子:显示文件前两行:
exec 4<&0 0<stock.txt
read line1
read line2
exec 0<&4
echo $line1
echo $line2
五、命令执行顺序
1、使用&&
A&&B A成功则执行B
2、使用||
A||B A失败则执行B
3、用()、{}将命令组合在一起
六、RE 正则表达式
当从文件或命令输出中抽取或过滤文本时,可以使用RE
^ 行首 $ 行尾 .单字符 *0到多个字符 []可以用逗号分隔
pattern /{n,m/} 表出现次数在n,m之间
例子:
匹配空行 ^$
grep支持RE,一般格式为:
grep [option] 基本正则表达式 [文件]
七、awk
以三个创始人的首字母命名,为样式扫描和处理语言
awk中支持 + ?,而grep sed不支持
八、sed
stream editor
把文档或字符串里的文字经过一系列编辑转换为另一格式
例子:打印文件第二行 $ sed -n '2p' quote.txt
打印文件1到3行 $ sed -n '1,3p' quote.txt
打印整个文件 $ sed -n '1,$p' quote.txt
tr命令用来从标准输入中通过替换或删除操作进行字符转换,其所有功能都可以用sed来完成
九、sort
对文件进行合并和分割
十、Shell编程
1、脚本第一行以 #!/bin/sh 开始
2、条件测试
test condition
or [ condition ]
使用最后退出状态 $? 可测知,以0表成功,1表失败
测试时使用逻辑: -a -o
3、expr 命令一般用于整数值,但也可以用于字符串
expr argument operator argument
4、反引号,shell将反引号的内容作为一个系统命令,并执行其内容
5、控制语句
结构:
if 条件1
then 命令1
elif 条件2
then 命令2
else 命令3
fi
结构:
case 值 in
1) 命令1 ;;
2) 命令2 ;;
esac
结构:
for 变量名 in 列表
do
命令1
命令2
done
结构:
until 条件
命令1
命令2
done
结构:
while 命令
do
命令1
命令2
done
6、break、continue 用于控制循环
十一、Shell函数
$# 用于表示参数个数
$1,$2,...,$9表示依次的参数
十二、常见shell命令
1、basename path
从路径中分离出文件名
2、cp options file1 file2
覆盖文件
-i 在覆盖前提示用户进行确认
-r 拷贝相应的目录及其子目录
3、diff options file1 file2
显示两个文件中不一致的行
-c 按照标准格式输出
-I 忽略大小写
4、dircmp options directory1 directory2
显示两个目录的不同
5、dirname path
与basename相反,返回路径部分
6、file filename
用来确定文件类型
7、head -number files
显示相应文件的前十行,可以通过number指定行数
8、sleep number
使系统等待相应的秒数
9、wait process ID
用来等待进程号位process ID的进程或所有的后台进程结束后,再执行当前脚本
10、wc options files
统计文件中的字符数、单词数和行数
-c 显示字符数
-l 显示行数
-w 显示单词数
十三、重要信息
1、/dev/null 表示系统垃圾堆
2、fork 是Unix中派生新进程的唯一方法,调用一次,返回两次
3、exec系列函数,并不创建新进程,所以进程ID不改变,只是用另一个新进程替换了当前进程的正文、数据、堆和栈段。
十四、常用shell编程问题
1、打印abc.txt文件的第二行
a:sed -n '2p' abc.txt
2、打印系统中进程名为proc的进程个数
a:ps -ef | grep "proc" | grep -v "grep" | wc -l
3、从文件中读取数据
a:用脚本实现
#!/bin/sh
while read LINE
do
echo $LINE
done < names.txt
4、输出从1到5
a:用脚本实现
#!/bin/sh
COUNTER=0
while [ $COUNTER -lt 5 ]
do
COUNTER = `expr $COUNTER + 1`
echo $COUNTER
done