LinuxShell编程合集讲解.docx

上传人:b****5 文档编号:5361840 上传时间:2022-12-15 格式:DOCX 页数:22 大小:35.55KB
下载 相关 举报
LinuxShell编程合集讲解.docx_第1页
第1页 / 共22页
LinuxShell编程合集讲解.docx_第2页
第2页 / 共22页
LinuxShell编程合集讲解.docx_第3页
第3页 / 共22页
LinuxShell编程合集讲解.docx_第4页
第4页 / 共22页
LinuxShell编程合集讲解.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

LinuxShell编程合集讲解.docx

《LinuxShell编程合集讲解.docx》由会员分享,可在线阅读,更多相关《LinuxShell编程合集讲解.docx(22页珍藏版)》请在冰豆网上搜索。

LinuxShell编程合集讲解.docx

LinuxShell编程合集讲解

LinuxShell编程合集

            一、变量和运算符

1.set命令可以查看和设置本地变量

2.readonly查看本地只读变量

readonlyvariable-name设置变量为只读变量

3.环境变量的设置在$HOME/.bash_profile(/etc/profile)中

4.exportvariable-name=value设置变量为环境变量

5.env查看所有环境变量

6.变量替换:

${var-name}显示实际值到var-name

${var-name:

+value}如果设置了var-name,则显示其值为value,否则为空

${var-nmae:

?

value}如果未设置var-name,显示用户定义错误信息value

${var-name:

-value}如果未设置var-name,显示其值为value

${var-nmae:

=value}如果未设置var-name,设置其值,并显示

7.unset取消变量

8.位置变量

$0    $1        $2        $3    $4  

脚本名  第一个参数A  第二个参数B  。

C  。

D    

注意:

$10是表示第一个参数后面加上“0”,第10个参数可以通过shift命令得到

可用shift或者shift[n]来表示左移参数的位置

shift与shift[1]相同,都是左移一个位置(从$1开始算,$0-脚本名是不会边的),如上图则$1的值为  B,$2的值为C......

$#参数的个数($0不算在内)

$*和$@都是列出全部参数,下面举例说明它们的差异:

比如在命令行中输入./test.shA"BC"D

则$*和$@都为ABCD

但是如果用了软引用之后:

"$@"可得到"A""BC""D"三个字段

而"$*"则得到"ABCD"一个字段

9.标准变量(大部分都是环境变量):

EXINIT:

保存使用vi初始化选项,如EXINIT='setnutab=4';exprotEXINIT

IFS:

域分隔符,默认是空格,可改边IFS=:

或IFS=':

'

HOME:

主目录

LOGNAME:

登录名

MAILCHECK:

每隔多长时间检查是否有邮件

MAILPATH:

用于多个邮箱时查看MAIL存储在哪几个文件中

TERM:

终端类型

PATH:

指定了当用户输入命令时linux搜索程序的目录由冒号:

分隔,shell将按PATH中给出的顺序搜索这些目录。

找到的第一个与命令名称一致的可执行文件将被执行

TZ:

时区

PS1:

主提示符,其缺省值'[\u@\h\w]\$'

u:

用户h:

主机名w:

当前的目录。

最后的"$"是普通用户的提示符,特权用户是"#"

PS2:

辅助提示符,一行中若需用多个命令时的提示符,缺省是">",如果用户在行末输入"\",然后回车,则会有改符号出现。

PWD:

当前运行的进程号

$$:

当前运行的进程号

$!

后台运行的最后一个进程的ID

$-显示shell使用的当前选项,与set相同

$?

显示最后命令的退出状态,0表示没有错误,其他表示错误。

10.影响变量的命令

(1)declare  设置或者显示变量

  -f    只显示函数名

  -r    创建只读变量

  -x    创建转出变量

  -i    创建整数变量

用+代替-可以颠倒选项的含义(r不能颠倒)

(2)export创建传给子shell的变量(创建环境变量)

  --表明选项结束,所有的后续参数都是实参

  -f表明在“名-值”对中的名字是函数名

  -n把全局变量转换成局部变量,命令的变量不再传给子shell

  -p显示全局变量列表

(3)readonly用于显示或者设置只读变量

  --表明选项结束

  -f创建只读变量

(4)typeset  用于显示或设置变量,是declare的同义词

(5)unset取消变量的定义

--表明选项结束

-f删除只读变量(但不能取消从shell环境中删除指定的变量和函数,如PATH,PS1,PDID,EUID,PID,UID等)

11.双引号:

使用双引号可引用除字符$,`,\外的任意字符和字符串

12.单引号:

单引号与双引号不同的是shell会忽略任何引用值。

换句话来说,如果屏蔽了其特殊含义,会将引号里所有的字符,包括引号作为一个字符串

13.反引号:

设置系统命令的输出到变量。

shell将反引号里的命令的内容作为一个系统命令并执行其内容

14.反斜杠:

  如果一个字符有特殊的意义,反斜杠可以屏蔽其含义,有特殊含义的字符有:

&*+^$`"|?

15.运算符:

按位运算符有:

~,<<,>>,^>|,&

$[]表示对方括号中的表达式求值$[2+8].(注意[]内左右都必须留空格)

$[2#111+1]=8表示二进制的1111+1

运算符的优先级

以下级别高的优先级高

13级:

+,-(正负)

12级:

!

~(逻辑非,按位取反)

11级:

*,/,%(乘,除,取摸)

10级:

+,-(加减)

9级:

<<,>>按位左移动,右移

8级:

<=,>=,<,>(小于等于,大于等于,小于,大于)

7级:

==,!

=(等于,不等于)

6级:

&按位与

5级:

^按位异或

4级|按位或

3级&&逻辑与

2级||逻辑或

1级=,+=,-=,*=,/=,%=,|=,<<=,>>=

      二、Shell输入与输出

1.echo命令可以显示文本行或者变量,或者把字符串输入到文件

echo[option]string

-e解析转义字符,

  转义符包括(

\c,回车不换行

\f,禁止

\t,跳格

\n)回车换行

-n回车不换行,linux系统默认回车换行

2.read从键盘或者文件的某一行文本中读如信息,并将其赋给一个变量

readvarible1varible2

如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直到遇到第一个文件结束符或回车;如果给出了多个变量,它们按吮吸分别赋给不同的变量,。

shell将用空格作为变量之间的分隔符

举例说明:

在shell脚本中有readABC命令行,而在提示的命令行中输入123,则A=1,B=2,C=3

3.cat可以用来显示文件内容、创建文件,还可以用它来显示控制字符。

cat|options|filename1..filename2...

-v显示控制字符

使用cat命令时要注意,它不会在文件分页符处停下来,它会一下显示完整个文件。

如果希望每次显示一页,可以使用more命令或者把cat命令的输出通过管道传递给另外一个具有分页功能的命令(如more,less)中。

cat命令举例:

catmyfile1myfile2myfile3>myfile123;

catmyfile123|more分页显示

cat-vdos.txt会出现“^M”等控制字符,这是在windows下的编辑器留下的

4.管道可以通过管道把一个命令的输出作为另一个命令的输入

举例说明:

df-k|awk'{print$1}'|grep-v"Filesystem"

df:

显示所有文件系统对i节点和磁盘块的使用情况

awk:

浏览和抽取信息

grep:

文本过滤

显示所有文件系统对i接点和磁盘块的使用情况信息中的第一列并不含有"Filesystem"的信息

5.tee:

把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中

tee-afile这个命令一般用于管道之后。

举例说明:

catfile|teefile.out将file中的信息输出到屏幕并拷贝到file.out中

6.exec:

exec命令可以用来代替当前shell;换句话说,并没有启动子shell,使用这一命令时任何现有环境都会  被清除,并重新启动一个shell

execcommand其中的command通常是一个shell脚本

对文件描述符操作的时候(也只有在这时),它不会覆盖你当前的shell

举例说明:

exec**.sh会重新登录并清除环境变量

7.标准输入、输出和错误

在shell中执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。

由于文件描述符不容易记忆,shell同时也给出了相应的文件名。

      文件      文件描述符  

输入文件----标准输入    0(缺省是键盘,也可以是文件或者其他命令的输出)  

输出文件---标准输出    1(缺省是屏幕,也可以是文件)  

错误输出文件--标准错误  2(缺省是屏幕,也可以是文件)  

系统中实际有12个文件描述符,可以任意使用文件描述符3-9

8.文件重定向改变程序运行的输入来源或输出地点

  command>filename把把标准输出重定向到一个新文件中

  command>>filename把把标准输出重定向到一个文件中(追加)

  command1>fielname把把标准输出重定向到一个文件中

  command>filename2>&1把把标准输出和标准错误一起重定向到一个文件中

  command2>filename把把标准错误重定向到一个文件中

  command2>>filename把把标准输出重定向到一个文件中(追加)

  command>>filename2>&1把把标准输出和标准错误一起重定向到一个文件中(追加)

  commandfilename2把command命令以filename文件作为标准输入,以filename2文件作为标准输出

  command

  command<

  command<&m把把文件描述符m作为标准输入

  command>&m把把标准输出重定向到文件描述符m中

  command<&-把关闭标准输入

  重定向的几个注意点:

  重定向中为保护原来的文件不被覆盖可以用set-onoclobber命令来限制

  用set+onoclobber来取消限制,如果不取消的话也可以强制重定向

  command>|file

  catfile会清空file中的内容,因为shell会先清空stdout和stderr的管道。

  cat>file会造成死循环,因为它是一行行读出来的,永远都没有结束符

9.合并标准输出和标准错误

  合并标准输出和标准错误的时候,切记shell是用左至右分析相应的命令

举例说明:

grep"hi"test.txt>test.out2>&1标准输出和错误输出都输入到标准输出中

10.使用文件描述符

  举例说明:

  exec3<&00

  此时的exec不会清除环境变量,也不会重新登录,覆盖当前的sehll

      三、流控制结构

1.ifthenelse语句

if条件1      #如果条件1为真

then        #那么

  command1    #执行命令1

elif条件2    #如果条件2为真

then        #那么

  command2    #执行命令2

else        #如果条件1和条件2都不成立

  command3执行命令3

fi        #完成(if语句一定要以fi结束)

举例说明:

if["13"-lt"11"]  #如果13小于11

then      #那么

  echo"13<11"  #输出"13<11"

elif["13"-lt"12"]  #如果13小于12

then      #那么

  echo"13<12"  #输出"13<12"

else      #否则

  echo"13>=12"  #输出"13>=12"

2.case语句

case值in

模式1)    #如果模式1匹配

  命令1    #执行命令1

  ;;

模式2)    #如果模式2匹配

  命令2  #执行命令2

  ;;

*)    #如果以上模式都不匹配

  命令3  #执行命令3

  ;;

esac    #结束case语句

case取值后面必须为单词in,每一模式必须以右括号结束。

取值可以为变量或常数。

匹配发现取值符合某一模式后,其间所有命令开始执行直至;;。

模式匹配符号*表示匹配任意字符。

[。

]表示类或者范围中的任意字符。

举例说明:

case$Ain

  1)     #如果A的值为1

  echo"A=1"  #输出“A=1”

  ;;

  2)      #如果A的值为2

  echo"A=2"  #输出“A=2”

  ;;

  [34])    #如果A的值为3或4

  echo"A=3|4"  #输出“A=3|4”

  ;;

  esac    #结束

3.for循环

  for变量名in列表

  do

  命令1

  命令2

  done

当变量值在列表里,for循环即执行一次所有命令,使用变量名访问列表取值。

命令可为任何有效的shell命令和语句。

变量名为任何单词。

in列表用法是可选的,如果不用它,for循环使用命令行的位置参数。

in列表可以包含替换,字符串和文件名

举例说明:

forloopin12345       #在12345列表中循环(5次)

do            #开始执行命令

  echo"hello"         #执行命令

done          #完成

forloopin"onetwothree"   #当成一个元素只循环一次

do

  echo$loop

done          #输出onetwothree一行

forloopinonetwothree    #三次循环

do

  echo$loop

done

#输出one

  two

  three

列表可以是文件,如:

forloopin`catmyfile`

4.until循环

until条件

do

  命令1

  命令2

done

条件可为任何测试条件,若刚开始条件就为真,则不执行循环。

5.while循环

while命令

do

  命令1

  命令2

  ......

done

举例说明:

whilereadLINE

    do

      echo$LINE    #输出每行的信息

    done

6.break控制

break [n]            #跳出n层循环

举例说明:

forloopin123

done

echo${loop}

  forloopinonetwothree

  do

  echo${loop}

  //break/break2/continue#这三个命令替换测试

  echo${loop}+

  done

  done

若为break,则输出1one2one3one

若为break2则输出1one

若为continue则输出1onetwothree2onetwothree3onetwothree(每次输出都有换行)注意:

echo${loop}+没有执行

7.continue控制

强制进入下一次循环如上例子

          四、文本过滤

1.正则表达式

(1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/、*、?

等)组成。

(2)基本元字符集及其含义

  ^:

只匹配行首。

  如^a匹配以a开头的行abc,a2e,a12,aaa,......

  $:

只匹配行尾。

  如^a匹配以a结尾的行bca,12a,aaa,.......

  *:

匹配0个或多个此单字符。

如(a)*匹配空,a,aa,aaa,....

  []:

只匹配[]内字符。

可以是一个单字符,也可以是字符序列,用","将里面要匹配的不同字符串分开。

也可以使用-来表示[]内字符序列的范围,如[1-5]表示[12345]

  \:

只用来屏蔽一个元字符的特殊含义。

如\*,\',\",\|,\+,\^,\.等

  。

(点)只匹配任意单字符。

  pattern\{n\}:

只用来匹配前面pattern出现的次数.n为次数。

如a\{2\}匹配aa.

  pattern\{n,\}:

含义同上,但次数最少为n.如a\{2,\}匹配aa,aaa,aaaa,.....

  pattern\{n,m\}:

含义同上,但次数在n和m之间。

如a\{2,4\}匹配aa,aaa,aaaa三个

(3)举例说明:

  ^$:

匹配空行

  ^.$:

匹配包含一个字符的行

  \*\.pas:

匹配以*.pas结尾的所有字符或文件

  [0123456789]或[0-9]:

假定要匹配任意一个数字

  [a-z]:

任意小写字母

  [A-Za-z]:

任意大小写字母

  [S,s]:

匹配大小写S

  [0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}:

匹配IP地址[0-9]\{3\}三个0-9组成的字符串;\.:

匹配点(注意这里点是特殊的字符,所以要用"\"来屏蔽其含义)

2.find介绍

(1)查找具有某些特征文件的命令,可遍历当前目录甚至于整个文件系统来查看某些文件或目录,其遍历大的文件系统时一般放在后台执行。

(2)find命令的一般形式

  findpathname-options[-print-exec-ok]

  -pathname:

find命令所查找的目录路径。

如用"."来表示当前的目录,用/来表示系统根目录

  -print:

find命令将匹配的文件输出到标准输出

  -exec:

find命令对匹配的文件执行该参数所给出的shell命令,相应的命令形式为

  'command'{}\;(注意{}和\之间的空格)

  -ok和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

  options有如下几种:

  -name:

按照文件名查找文件

  -perm:

按照文件权限来查找文件

  -user:

按照文件属主来查找文件

  -group:

按照文件所属的组来查找文件

  -mtime-n+n按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。

find命令还有-atime和-ctime选项,但它们都和-mtime选项相似。

  -sizen[c]查找文件长度为n块的文件,带有c时表示文件长度以字节计。

  -nogroup查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在

  -newerfile1!

file2查找更改时间比文件file1新但比文件file2旧的文件

  -depth先查找指定目录有无匹配文件,若无则再在子目录中查找

  -type查找某一类型的文件,如

  b:

块设备文件

  d:

目录

  e:

字符设备文件

  p;管道文件

  l:

符号链接文件

  f:

普通文件

(3)find命令举例

  find-name"*.txt"-print查找txt结尾的文件并输出到屏幕上

  find/cmd".sh"-print查找/cmd目录下所有sh文件,并输出

  find.-perm755-print查找当前目录下权限为755的文件,并输出

  find`pwd`-userroot-print查找当前目录下属主为root的文件,并输出

  find./-groupsunwill-print查找当前目录下所属主是sunwill的文件

  find/var-mtime-5-print查找/var目录下更改时间为5天内的所有文件

  find/var-mtime+5-print查找/var目录下更改时间为5天以前的所有文件

  find/var-newer"myfile1"!

-newer"myfile2"-print查找/var目录下比myfile1新,但是比myfile2旧的所有文件。

  find/var-typed-print查找/var目录下所有目录

  find/var-typel-print查找/var目录下所有的符号链接文件。

  find.-size+1000000c-print查找当前目录下大于1000000字节的文件

  find/-name"con.file"-depth-print查找根目录下有无"con.file",若无则在其子目录中查找

  find.-typef-execls-l{}\;查找当前目录下是否有普通文件,若有则执行ls-l

  (4)xargs命令

  在使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec。

不幸的是,有些系统对能够传递给exec的命令长度有限制,这样find命令运行几分钟之后就算出现溢出错误。

错误信息通常是“参数列太长”或“参数列溢出”。

这就是xargs的用处所在,特别是与find命令一起使用,exec会发起多个进程,而xargs会多个,只有一个

  find./-perm-7-print|xargschmodo-w查找权限为7的文件并传递给chmod处理

3.grep介绍

(1)grep的一般格式为grep[options]基本正则表达式[文件

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1