linux中基础命令

shell脚本中变量名和等号之间不能有空格

标准输入stdin,标准输出stdout和标准错误stderr,三个系统文件的文件描述符分别为0,1和2。   文件名 2>&1 的意思就是将标准错误也输出到标准输出当中。

shell中一些比较特殊的变量:

 

特殊变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

在shell脚本中可以使用三类命令:
1)Unix 命令:
  虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。
常用命令语法及功能
  echo "some text": 将文字内容打印在屏幕上
  ls: 文件列表
  wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数
  cp sourcefile destfile: 文件拷贝
  mv oldname newname : 重命名文件或移动文件
  rm file: 删除文件
  grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt
  cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令
  cat file.txt: 输出文件内容到标准输出设备(屏幕)上
  file somefile: 得到文件类型
  read var: 提示用户输入,并将输入赋值给变量
  sort file.txt: 对file.txt文件中的行进行排序
  uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq
  expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3
  find: 搜索文件比如:根据文件名搜索find . -name filename -print
  tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile
  basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux
  dirname file: 返回文件所在路径比如:dirname /bin/tux将返回 /bin
  head file: 打印文本文件开头几行
  tail file : 打印文本文件末尾几行
  sed: Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。不要和shell中的通配符相混淆。比如:将linuxfocus 替换为 LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file
  awk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'这里我们使用,作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下: Adam Bor, 34, IndiaKerry Miller, 22, USA命令输出结果为:Adam Bor, IndiaKerry Miller, USA
2) 概念: 管道, 重定向和 backtick
  这些不是系统命令,但是他们真的很重要。
  管道 (|) 将一个命令的输出作为另外一个命令的输入。
grep "hello" file.txt | wc -l
  在file.txt中搜索包含有”hello”的行并计算其行数。
  在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。
  重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
  > 写入文件并覆盖旧文件
  >> 加到文件的尾部,保留旧文件内容。
反短斜线
 使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。
  命令:
find . -mtime -1 -type f -print
  用来查找过去24小时(-mtime –2则表示过去48小时)内修改过的文件。如果您想将所有查找到的文件打一个包,则可以使用以下脚本:
#!/bin/sh
# The ticks are backticks (`) not normal quotes ('):
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print` 

大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…
  通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等 

 

cat : cat file1 file2 file3    这个命令的作用是将文件内容拼接到一起。

-s 删除多余空白行。

sort: sort 用于对文件内容进行排序。   -n  是升序   -r是降序    -t是要以什么字符为分割    -k是要以分割的第几列(列号)进行排序(从1开始)   -u忽略相同行。

例:[root@mail text]# cat sort.txt

aaa:10:1.1

ccc:30:3.3

ddd:40:4.4

bbb:20:2.2

eee:50:5.5

eee:50:5.5

[root@mail text]#sort -nk 2 -t: sort.txt

aaa:10:1.1

bbb:20:2.2

ccc:30:3.3

ddd:40:4.4

eee:50:5.5

用第一个字符作为键: sort -nk 1,1 sort.txt

read: 执行命令时,从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量。

read后面的变量var可以只有一个,也可以有多个,这时如果输入多个数据,则第一个数据给第一个变量,第二个数据给第二个变量,如果输入数据个数过多,则最后所有的值都给最后一个变量。

-p:       read –p “提示语句”,则屏幕就会输出提示语句。

read –n :代表输入字符的个数               设置read命令计数输入的字符。当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量

例:read -p "Enter number:" no;   #输入字符串,直至敲回车为止,会自动将输入的数据赋值给变量  no    

echo $no;                              #输出no

find;:文件查找,沿着文件层次结构向下遍历。

我们可以用管道将一个命令的stdout(标准输出)重定向到另一个命令的stdin(标准输入)。

例如: cat foo.txt | frep "test"

但是有些命令只能以命令行参数的形式接受数据,不能以标准输入接受数据。因此就用到了xargs ,它擅长将标准输入数据转换成命令行参数。

xargs可以处理stdin并将起转换成为特定的命令行参数。xargs也可以将单行文本输入转换成其它格式。例如:单行变多行或者多行变单行。

xargs命令紧跟在管道操作符之后,以标准输入作为主要的源数据流,它使用stdin并通过提供命令行参数来执行其他命令。

xargs命令把从stdin接受到的数据重新格式化,再将其作为参数提供给其他命令。

写一个小的脚本理解他:

 #!/bin/sh

#文件名:cecho.sh

echo $*'#' ;

./cecho.sh args1 args2    输出结果为; args1 args2#

当参数传递给文件cecho.sh 后,它会将这些参数打印出来,并以#字符作为结尾。

在写一个脚本  cat args.txt 

args1

args2

args3

输入命令:cat args.txt | xargs -n 1 ./cecho.sh

结果为; args1#

args2#

args3#

-n 1代表每行打印一个

-n 2 代表每两行打印一个

 

posted @ 2017-09-03 17:21  c++c鸟  阅读(290)  评论(0编辑  收藏  举报