现在的位置: 首页 > 综合 > 正文

【Unix】Shell编程基础

2018年01月12日 ⁄ 综合 ⁄ 共 2622字 ⁄ 字号 评论关闭

一、文件的处理

读、写、可执行(指其是一个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

 

 

抱歉!评论已关闭.