发表于 2018-8-22 07:28:51

linux shell 基本知识

3.1   保留变量
  BASH 中有一些保留变量,下面列出了一些:
  $IFS  这个变量中保存了用于分割输入参数的分割字符,默认识空格。
  $HOME  这个变量中存储了当前用户的根目录路径。
  $PATH  这个变量中存储了当前 Shell 的默认路径字符串。
  $PS1  表示第一个系统提示符。
  $PS2  表示的二个系统提示符。
  $PWD  表示当前工作路径。
  $EDITOR 表示系统的默认编辑器名称。
  $BASH  表示当前 Shell 的路径字符串。
  $0, $1, $2, ...
  表示系统传给脚本程序或脚本程序传给函数的第0个、第一个、第二个等参数。
  $#   表示脚本程序的命令参数个数或函数的参数个数。
  $$   表示该脚本程序的进程号,常用于生成文件名唯一的临时文件。
  $?   表示脚本程序或函数的返回状态值,正常为 0,否则为非零的错误号。
  $*   表示所有的脚本参数或函数参数。
  $@   和 $* 涵义相似,但是比 $* 更安全。
  $!   表示最近一个在后台运行的进程的进程号。
3.2    随机数
  a=$RANDOM
  echo $a
3.4   变量的特殊操作
  BASH 中还有一些对变量的简洁、快速的操作,大家还记得 "${var}" 和 "$var" 同样是对变量的引用吧,对 ${var} 进行一些变化就可以产生一些新功能:
  ${var-default} 表示如果变量 $var 还没有设置,则保持 $var 没有设置的状态,并返回后面的默认值 default。
  ${var=default} 表示如果变量 $var 还没有设置,则取后面的默认值 default。
  ${var+otherwise} 表示如果变量 $var 已经设置,则返回 otherwise 的值,否则返回空( null )。
  ${var?err_msg} 表示如果变量 $var 已经设置,则返回该变量的值,否则将后面的 err_msg 输出到标准错误输出上。
  请同学们自己尝试下面的例子:
  #!/bin/bash
  echo ${var?There is an error}
  exit 0
  还有下面一些用法,这些用法主要用于从文件路径字符串中提取有用信息:
  ${var#pattern}, ${var##pattern} 用于从变量 $var 中剥去最短(最长)的和 pattern 相匹配的最左侧的串。
  ${var%pattern}, ${var%%pattern} 用于从变量 $var 中剥去最短(最长)的和 pattern 相匹配的最右侧的串。
  另外 BASH 2 中还加入下面一些操作:
  ${var:pos} 表示去掉变量 $var 中前 pos 个字符。
  ${var:pos:len} 表示变量 $var 中去掉前 pos 个字符后的剩余字符串的前 len 个字符。
  ${var/pattern/replacement} 表示将变量 $var 中第一个出现的 pattern 模式替换为 replacement 字符串。
  ${var//pattern/replacement} 表示将变量 $var 中出现的所有 pattern 模式全部都替换为 replacment 字符串。
4.2   用 BASH 设计简单用户界面
  BASH 中提供了一个小的语句格式,可以让程序快速的设计出一个字符界面的用户交互选择的菜单,该功能就是由 select 语句来实现的,select 语句的语法为:
  select var in
  
  do
  statments use $var
  done
  #!/bin/bash
  OPTIONS="Hello Quit"
  select opt in $OPTIONS; do
  if [ "$opt" = "Quit" ]; then
  echo done
  exit
  elif [ "$opt" = "Hello" ]; then
  echo Hello World
  else
  clear
  echo bad option
  fi
  done
  exit 0
  #!/bin/bash
  passwd="aka@tsinghua"
  ftp -n localhost hrwang and mjfan are husband\
  >and wife' datafile
  #如果在datafile文件中发现匹配以hrwang开头的行,则在该行下面追加hrwang and mjfan are husband and wif
  sed '1,20y/hrwang12/HRWANG^$/' datafile
  #将1到20行内,所有的小写hrwang转换成大写,将1转换成^,将2转换成$。
  #正则表达式元字符对y命令不起作用。与s命令的分隔符一样,斜线可以被替换成其它的字符。
  另外一个非常有用的重定向操作符是 "-",请看下面这个例子:
  $ (cd /source/directory && tar cf - . )|(cd /dest/directory && tar xvfp - )
  该命令表示把 /source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到 /dest/directory 目录下去,这个命令在 /source/directory 和 /dest/directory 不处在同一个文件系统下时将显示出特别的优势。
  下面还几种不常见的用法:
  n&- 表示将标准输出关闭
  $find /home -name lost* >all_results 2>& 1
  上面这个例子中将首先将标准错误输出也重定向到标准输出中,再将标准输出重定向到 all_result 这个文件中
  BASH 中还有一些对变量的简洁、快速的操作,大家还记得 "${var}" 和 "$var" 同样是对变量的引用吧,对 ${var} 进行一些变化就可以产生一些新功能:
  ${var-default} 表示如果变量 $var 还没有设置,则保持 $var 没有设置的状态,并返回后面的默认值 default。
  ${var=default} 表示如果变量 $var 还没有设置,则取后面的默认值 default。
  ${var+otherwise} 表示如果变量 $var 已经设置,则返回 otherwise 的值,否则返回空( null )。
  ${var?err_msg} 表示如果变量 $var 已经设置,则返回该变量的值,否则将后面的 err_msg 输出到标准错误输出上。
  #!/bin/bash
  echo ${var?There is an error}
  exit 0
  还有下面一些用法,这些用法主要用于从文件路径字符串中提取有用信息:
  ${var#pattern}, ${var##pattern} 用于从变量 $var 中剥去最短(最长)的和 pattern 相匹配的最左侧的串。
  ${var%pattern}, ${var%%pattern} 用于从变量 $var 中剥去最短(最长)的和 pattern 相匹配的最右侧的串。
  另外 BASH 2 中还加入下面一些操作:
  ${var:pos} 表示去掉变量 $var 中前 pos 个字符。
  ${var:pos:len} 表示变量 $var 中去掉前 pos 个字符后的剩余字符串的前 len 个字符。
  ${var/pattern/replacement} 表示将变量 $var 中第一个出现的 pattern 模式替换为 replacement 字符串。
  ${var//pattern/replacement} 表示将变量 $var 中出现的所有 pattern 模式全部都替换为 replacment 字符串
  用 BASH 设计简单用户界面
  select var in

  do
  statement use $var
  done
  #!/bin/bash
  OPTIONS="hello quit"
  select opt in $OPTIONS; do
  if [ "$opt"="quit"]; then
  echo done
  exit
  elif [ "$opt"="hello" ]; then
  echo hello world
  else
  clear
  echo bad option
  fi
  done
  exit 0
  #!bin/bash
  passwd="aka@tsinghua"
  ftp -n localhost
页: [1]
查看完整版本: linux shell 基本知识