一、shell命令
  1.$ date 显示时间
  2.$ who 查看登陆系统的用户
  $ who am i 查看自己的信息
  3.$ echo 在终端机上显示键入在命令行的任何信息,会去掉单词中的空格
  例如:$echo this is test
  显示 this is test
  4.$ ls 列出文件清单
  5.$ cat (查看的文件名称) 显示文件内容
  6.$ wc (参数 -l 行数 -c 字符数 -w 单词数) (统计的文件名称) 统计文件中的行数,字符数,单词数
  7.$ cp (源文件) (目标文件) 复制命令
  8.$ mv (源文件) (目标文件) 文件重命名命令,也可以移动文件的位置
  9.$ rm 删除命令
  10.$ pwd 显示当前工作目录
  11.$ cd 改变当前工作目录
  12.$ mkdir 创建目录
  13.$ rmdir 删除目录(目录为空)
  14.$ rm 删除文件 加参数 -r 删除目录和目录中的文件
  15.替换符合:* 替换为目录中的所以文件的文件名。单字替换符合:? 替换单字。[abc]替换 a 或 b 或 c 。[0-9] 匹配0-9的任
  意字符。如果 [ 后的字符是 !,表示反过来匹配,即可以匹配除方括号中所列字符以外的任何字符。
  16.ln:链接命令。(优点,减小系统占有,使文件同步)
  一般格式:ln from to 把文件from 和文件to 链接起来。
  连接的限制是必须位于同一个文件系统,连接后对于任何一个文件的改变都会影响的另一个文件,但是删除任何一个文件,另一个文
  件依然存在,不受删除的影响。(判断系统中有那些文件系统用 df 命令)
  不同的系统进行连接加参数 -s ,建立一个符合化连接。此连接与普通连接很相似,不同的是,删除源文件后,该符合连接就不起作
  用了。
  17.输出的重新定向:命令德输出通常提交到标准输出设备,也可以很方便德转向一个文件来代替,这叫输出重新定向。
  命令:在把输出写入到标准输出德命令后加 > filename
  例如:$ who >filename
  >> 符号为不覆盖原来的文件内容
  $ > filename ,前面没有命令时,shell会创建一个空的文件(长度为0个字符),如果文件已经存在,其内容会消失。
  18.输入重定向:对应于输出的重新定向的就是输入重定向,命令符合是 <
  例如:$ wc -l < filename
  19管道:unix系统可以把两条命令的的效果连接起来,这种连接称作管道。
  例如:$ who | wc -l
  $ ls | wc -l
  20.过滤器:指能够从标准输入接受输入,对输入进行处理后,把结果写入标准输出的任何程序。wc , cat ,sort 是过滤器,ls,
  who,date,cd,pwd,echo,rm,mv,cp都不是。
  21.标准错误:unix把大部分错误信息都写的这里,标准
错误默认也是终端。
  把错误输入到文件试用命令格式:命令 2> 文件
  例如:$ls n* 2> filename
  22.一行键入多个命令,用;号分割
  例如:$ date ;pwd
  23.命令发送到后台:在命令后加一个 & 号,该命令就发送到后台了。
  例如:$ date >> filename &
  24:ps命令:查看进程的命令,参数 -f 查看父进程的命令
  例如:$ ps -f
  25.正规表达式
  :%s/old/new/g 注:g是全部替换 或 :%s/old/new 全部替换:看vi说明
  ifconfig用root用户登陆查看本机的ip地址
  26.cut:从文件中剪出各种各样的数据 【cut -cdhars file】
  cut -c5- data 把data文件中的每一行的第五个到行尾的字符剪出来,并把结果写入标准输出
  who | cut -c1-8 剪出who的输出的每一行的第一个到第八个字符
  who | cut -c1-8 | sort 剪出who的输出的每一行的第一个到第八个字符,并进行排序
  cut -d: -f1 /etc/passwd 剪出/etc/passwd 中的以:开头的第一个字段
  cut -d: -f1,6 /etc/passwd 剪出/etc/passwd 中的以:开头的第一个字段和第六个字段
  27.paste 把多个行合并起来,然后输出 【paste files】
  paste names numbers 将两个文件合并,然后输出
  paste -d'+' names numbers 将两个文件合并中间用+号连接,然后输出
  paste -s names 将一个文件所有行合并,然后输出
  ls | paste -d' ' -s - 把ls的输出用合并一行并用空格分开。
  28.sed 是用来编辑数据的程序,意思是流编辑器。sed不能用于交互。【sed command file】。
  sed 's/unix/UNIX/' intro 将unix改为UNIX
  sed不对原始文件进行更改,要保存更改,必须把sed的输出重定向到一个临时文件,然后把临时文件移回原来的文件。
  sed 's/unix/UNIX/' intro > temp
  mv temp intro
  sed -n '1,2p' intro 显示前两行
  sed -n '/unix/p' intro p命令前用斜扛括住字符串,sed只从标准输入中显示包含这些字符的行。
  sed '1,2d' intro 要删除正行,用d命令。删除1,2行
  29.grep:从一个或多个文件中搜索特定的字符串。【grep pattern files】
  grep d 从ed.cmd中出shell所在行
  grep '[A-Z]' list list中包含一个大写字母的行
  grep '[0-9]' list list中包含一个数字的行
  grep '[A-Z]...[0-9]' list list中包含以大写字母开头,数字结尾的5个字符组合的行
  grep '\.pic$' filelist filelist中以.pic结尾的行
  grep -v 'unix' intro 显示不含unix的行
  grep -l 'move_history' *.c 列出包含'move_history' 变量的行
  grep -n 'move_history' *.c 列出包含'move_history' 变量的行,前面加行号。
  30.sort 输出进行排序
  sort -u names 输出中去掉重复的行
  sort -r names 反
序排序
  sort names -o new_names 将结果输出到new_names中
  sort -n data 安算术方法排序
  sort +1n data 跳过第一个字段排序
  31.uniq查连续的重复行。【uniq in_file out_file】
  sort names|uniq -d 显示重复的行
二、shell编程起步
  1.要让文件可以执行,要改变文件的许可
  chmod +x nu 改变文件nu的许可,然后在当前目录下键入【./nu】即可执行
  2.注释符合为#号
  3.变量:以字母或下划线开头,后跟0个或若干个字母、数字、下划线字符。【variable=value】
  count=1 注意=号两边不能有空格,linux中没有数据类型的概念。
  4.显示变量的值【echo $vairable】$符合不能掉了
  echo $count
  5.空值:如果一个变量没有值,我们就说它含有空值,这是变量没有赋值时的默认值。
  6.文件名替换和变量:shell先做变量替换,后做文件名替换。
  7.$(variable)结构
  假定把一个文件名存于变量filename中,要在文件名后加X
  mv $filename ${filename}X 给文件名后加X
  8.内部的整数算术运算【$((espression))】
  例如:echo $((a=a+1)) 应为a没有赋值,所以结果是1,等价于a=0+1
  表达式中可以随意使用括号来强制分组,例如:echo $((i=(i+10)*j))
  如果不想用echo或其他的什么命令而想直接给变量赋值,可以把赋值移到算术扩展前面
  例如:i=$((i*5))
  判断表达式:result=$((i >= 0 && i<= 100)),为真是result=1,为假result=0。
三、引用
  1.单引号:
  作用(1、)让本来需要用空格分割的字符合在一起
  例如:grep 'susan goldberg' filename 从filename中出叫susan住址是goldberg的人(filename中有两个susan的人),如果使
  用(grep susan goldberg filename),将报错(grep:can't open goldberg)。当shell看到第一个单引号时,忽略掉其后直到右
  引号的所有本来有特殊作用的字符。
  echo '*' 输出 *
  echo '$file' 输出 $file
  2.双引号:双引号不忽略一下三种符合(美圆符合、反引号、反斜扛)
  例如:x=*
  echo $x 输出 当前的文件名
  echo '$x' 输出 $x
  echo "$x" 输出 * (双引号告诉shell在引号内照样进行变量的替换,所以shell把$x替换为*,因为引号中的不做文件名的替换,所
  以就把*号做为要显示的值传递给echo)
  如果想替换变量的值,又不想shell把替换的内容做特殊字符对待,就应该把变量名括在双引号中。
  可以用双引号来对shell隐藏单引号,反之亦然。
  例如:x="'hello,'said"
  echo $x 输出 'hello,'said
  x='"hello,"saidfff'
  echo $x 输出 "hello," saidfff
  3.反斜扛:反斜扛等价于在
一个字符前后加上一个单引号,也有一些例外。
  例如:echo > 报错
  echo \> 输出为 >
  x=*
  echo \$x 输出 $x
  特殊:shell把行尾的反斜扛作为续行,它去掉根在后面的换行字符,也不把换行字符当作参数分隔符。这种结构在分行键入长命令
  时经常使用。
  双引号中的反斜扛:作用去掉字符的特殊意义。
  例如:x=5
  echo "the value of x is \"$x\"" \"$x\"等价于$x
  输出 the value of x is "5"
  4.命令替换:命令替换是指shell能够将一个命令的标准输出插入在一个命令行的任何位置的功能。shell有两种方法作命令的替换:
  把shell命令用反引号或者$(...)结构括起来。
  反引号是告诉shell执行括起来的命令,并将括起来的命令的标准输入插入到这个位置。【`command`】
  例如:$echo the data is:`date`
  $(...)结构:例如(echo the is:$(date))shell创建文件并写入内容
  $(...)结构可以嵌套:echo the are $(who | wc -l) user logged in
  处理echo 命令行的过程中,shell在进行替换时将换行字符去掉了,在变量外括上双引号可以保留换行字符。
  例如:namelist=$(cat names)
  echo "$namelist" 输出的结果有换行字符的
  5、expr 用来进行算术的运算的
  例如:expr 1+2 结果是3
  expr "17*5" 输出是17*5
  expr 17\*6 结果是102
  例如:i=1
  i=$(expr $i + 1)
  echo $i 结果是2
  以大Z结尾的压缩文件的说明:压缩命令compress 文件名,解压uncompress 文件名
  adduser是增加使用者.
  touch filename 作用是重新读取文件
第七章 参数传递
  1、$#变量里存储的是命令行中所键入的参数的个数
  2、$*变量里存储的是命令行中所键入的所有的参数
  3、echo "$1 $2" >> filename 【将$1和$2的变量添加到filename文件的后面】
  sort -o filename filename 【增加新项后的新文件保持有序】
  4、删除文件中的数据
  grep -v "$1" phonebook > /temp/phonebook
  mv /temp/phonebook phonebook
  【删除文件中指定名字的行,然后将文件重新定向,再次覆盖源文件。grep -v "$1" phonebook,输出phonebook中不含"$1"的数据
  行,> /temp/phonebook,将输出写入到根目录下的temp文件夹下的phonebook文件里,然后将当前目录下的phonebook文件用
  /temp/phonebook文件覆盖掉】
  5、如果要给一个程序传递9个以上的参数,不能用$10,$11,要用${n},例如:${10},shell将$10替换成$1的值后面跟一个0。
  6、shift命令的作用是把位置参数左移。
  当执行shift时,$2的值的将赋给$1,$3的内容将赋给$2,$1的值将丢失。
  通过shift后跟一个数字,可以一次移动几个位置,shift 3,相当与s
hift shift shift
第八章 判断
  1、if命令
  【if command(0表示成功,非0表示失败)
  then
  command
  command
  fi
  】
  2、$?变量
  shell自动将最后执行的命令的退出状态设置到shell变量$?中,可以用echo命令在终端上显示出来。
  3、test命令:【test expression】,其中expression表示要测试的条件。test计算expression,如果结果是真,其返回值是0;如
  果为假,返回值是非0。
  注意:test把所有操作数和操作符作为单独的参数分别对待,也就是说他们之间至少要有一个空白字符分隔。
  例如:test "$name" = rose 。把给test的参数中的shell变量用引号括起来,可以保证在参数为空时,仍然知道有这个参数。
  4、检测字符串的操作符
  5、test的另一个格式
  test expression 等于 [ expression ]
  例如:if [ "$name" = rose ]
  then
  echo "name is rose"
  fi
  6、test 整数操作符
  7、test的常用文件操作符
  8、逻辑非操作符!
  可以把一元的逻辑求非操作符放在其他任何test表达式之前,对这个表达式的结果求非。
  例如:/home/phonebook不可读的话,[ ! -r /home/phonebook ] 返回的退出状态为0(真)
  9、逻辑与操作符 -a
  操作符 -a对两个表达式做逻辑与操作,如果两个表达式都为真,则返回真。
  例如:$file 代表的文件是普通并可以读取的文件, [ -f "$file" -a -r "$file" ] 返回真。
  10、小括号
  test命令中可以用小括号改变求值的顺序,只是要保证把小括号用引号括起来。
  例如: [ \( "$number" -ge 0 \) -a \( "$number" -lt 10 \) ]就是 0 =< number < 10。
  11、逻辑或操作符 -o
  和-a类似,两个表达式中一个为真,他求的结果就是真。 -o的优先级小于-a 。
  12、else结构
  【if command1
  then
  command
  command
  else
  command
  command
  fi】
  13、exit命令
  【 exit n 】
  exit命令可以立即终止shell程序的执行,n为希望返回的退出状态。如果不指定,就采用exit之前最后所执行命令的退出状态。
  14、elif结构
  【if command1
  then
  command
  elif command2
  then
  command
  else
  command
  fi】
  15、case命令
  【case value in
  pat1) command
  command;;
  pat2) command
  command;;
  *) command;;【没有匹配项时,执行这个命令】
  esac】
  把value依次和pat相比较,直到发现一项匹配,就执行该匹配项后直到双分号之间的所有命令,执行到双分号后,该case语句就结束
  ;如果没有发现匹配的

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。