当前位置: 主页 > Linux安装教程 > 系统设置 >

在Linux系统下BASH 脚本的使用

时间:2018-01-08 10:16来源:未知 作者:Linux先生 举报 点击:
BASH脚本要么作为自动进程的一部分被调用(无需人为干预),要么以交互方式运行(用户根据提示执行操作)。只要您拥有文件的执行权限,便可以从命令行键入该文件

  BASH脚本要么作为自动进程的一部分被调用(无需人为干预),要么以交互方式运行(用户根据提示执行操作)。只要您拥有文件的执行权限,便可以从命令行键入该文件的名称来运行它。如果您没有文件的执行权限,但拥有其读取权限,则可以通过在脚本的前面加上 sh 来运行该脚本。
 


 

  
  如果脚本设计为在无用户输入的情况下运行,则可以使用多种可选方法调用它。可以在后台运行脚本,即使在断开连接的情况下,您仍可以通过输入以下形式的命令来运行:
  
  nohup /path_to_dir/myscript_here.sh &
  
  这对于需要很长时间才能完成的脚本很有用。at 命令可用于在将来执行脚本,而 cron 可用于计划要重复执行的脚本。
  
  以下示例介绍了提供视图输出(使用 echo)、循环、条件逻辑以及变量赋值等重要方面。
  
  print_args.sh。参数是位于命令名右侧并传递到脚本中的词。要访问第一个参数,使用 $1 变量。$0 变量包含脚本本身的名称。$# 变量包含脚本中的参数个数。一种迭代所传递的所有参数的便捷方法是使用 while 循环和 shift 命令。该命令使您可以迭代参数列表中的所有参数(而非保持无限循环)。
  
  while [ $# -ne 0  ]
  
  do
  
  echo $1
  
  shift
  
  done
  
  如果脚本将文件名作为参数(或提示用户输入文件名)并在后面读取该文件,则建议您检查其访问性和可读性。例如,涉及选择备份控制文件的恢复脚本可能提示用户选择将在脚本后面部分中用于恢复文件的备份控制文件。
  
  if [ !-r $1 ]; then # not exists and is readable
  
  echo"File $1 does not exist or is not readable."
  
  exit;
  
  fi    
  
  字符序列
  
  if [ !-r $1 ];
  
  是实际执行测试的部分。如果方括号之间的内容结果为 true,则将执行位于 if 和 fi 之间的命令。实际测试显示在方括号之间。惊叹号用于对所执行的测试取反。-r 选项检查文件是否可读。在这个特定示例中所要测试的是传递给脚本的第一个参数。通过使用另一测试 (-d ),可以检查给定条目是否是目录(参见 is_a_directory.sh)。
  
  do_continue.sh。该示例是一个可用于读取各种目的的用户输入的简单、典型的命令序列。在运行可能在某些无法从脚本内部确定的条件下导致数据丢失或其他不好结果的进程前,建议您增加一个提示,询问用户是否确实希望脚本执行接下来的命令。以下示例询问用户是否要继续,从命令行读取一个名为 doContinue 的变量并对求解用户的输入。如果用户输入的不是“y”,则告知该用户脚本“将退出”且不执行 if 代码块 (fi) 后的其他脚本。
  
  doContinue=n
  
  echo -n "Do you really want to continue?(y/n) "
  
  read doContinue
  
  if [ "$doContinue" != "y" ]; then
  
  echo "Quitting..."
  
  exit
  
  fi
  
  只有拥有相应权限和环境的用户才能运行给定脚本。在脚本中检查试图运行脚本的用户很有用。如果将命令括在单引号 (‘) 字符中,则将该命令的结果返回给脚本。以下示例在脚本中使用 whoami 检索当前登录的用户,并稍后使用 date 命令显示日期。
  
  echo "You are logged in as 'whoami'";
  
  if [ ‘whoami‘ != "oracle" ]; then
  
  echo "Must be logged on as oracle to run thisscript."
  
  exit
  
  fi
  
  echo "Running script at ‘date‘"
  
  为与 Oracle 数据库交互而编写的脚本有时需要输入数据库口令等机密信息。stty –echo 命令关闭屏幕响应,这样为随后的读取命令输入的信息就不会显示在屏幕上了。在读取机密信息并将其存储在变量(以下示例中的 pw)中后可以使用 stty echo 重新打开显示。
  
  stty -echo    
  
  echo -n"Enter the database system password: "
  
  read pw
  
  sttyecho

推荐内容