泰山神 发表于 2018-8-30 09:44:08

3.shell程序的结构

  Shell组成
  # vim test.sh
  #!/bin/bash
  #用途:这是一个简单的shell示范程序
  function show_name() {
  echo "今天是$1,你大大$2,来自$3"
  }
  name="$1"
  ip="192.168.0.117"
  today=`date +%F`
  if [ $# != 1 ];then
  echo "Usage: . /$0 [使用者名称]"
  exit
  fi
  show_name "$today""$name" "$ip"
  sleep 5
  echo
  echo "Bye-Bye"
  # chmod +x test.sh
  # bash test.sh
  Usage: . /test.sh [使用者名称]
  # bash test.sh pan
  今天是2014-03-04,你大大pan,来自192.168.0.117
  Bye-Bye
  解释:定义函数show_name
  定义变量name iptoday
  调用函数
  Sleep 暂停5秒
  执行bash shell的方法
  #./test.sh 或者source /root/shell/test.sh
  #pwd
  /root/shell
  #/root/shell/test.sh
  #sh test.sh
  Bash shell 排错方法
  #bash –v test.sh jack
  检查程序行
  #bash –n test.sh
  追踪脚本的执行
  #bash –x test.sh
  强制变量一定要经过声明才能使用
  Shopt –s –o nounset
  Bash shell执行的原理
  登录主机后我们所处的已经是一个bash shell 这个shell 叫做loginshell是我们以后执行脚本的父shell
  # vim cd.sh
  #!/bin/bash
  cd /var/log
  touch cd.txt
  # chmod +x cd.sh
  # ./cd.sh
  # cat /var/log/cd.txt
  #
  你会发现执行完我们还在当前的目录
  #. cd.sh
  #
  会发现这样操作就到了刚才脚本里的目录
  .和source    会让脚本只在父shell 环境执行
  子shell在开启子shell
  # echo $SHLVL
  1
  # bash
  # echo $SHLVL
  2
  # bash
  # echo $SHLVL
  3
  #
  每执行一次就进入下一层shell
  Bash shell的启动配置文件
  Bash有5种运行模式
  分别是互动模式,非互动模式,以sh名称调用,posix模式和限制功能模式
  登录
  登录主机时,login shell先执行/etc/profile,接着bash检查用户的主目录中是否有.bash_profile,或者是否有.bash_login,或者是否有.profile ,若有则会读取并执行其中的一个文件执行顺序
  .bash_profile    .bash_login .profile
  注销
  .bash_logout
  执行新shell
  1.执行交互式的shell:例如直接执行bash 产生一个子shell 此时bash会读取并执行/etc/bash.bashrc,以及主目录中的.bashrc
  2.执行shell脚本:例如执行脚本test.sh 它会检查BASH_ENV它会去看指向的文件
  执行bash –r或以rbash的名称调用
  rbash其实只是一个指向bash的soft link 执行rbash 或bash –r称为受限模式
  例如:不能使用cd指令,不能设定或取消环境变量,使用的命令名称中不可以含有/字符,内置命令参数不能使用含有/的文件等

页: [1]
查看完整版本: 3.shell程序的结构