Shell组成
[root@pankuo 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"
[root@pankuo shell]# chmod +x test.sh
[root@pankuo shell]# bash test.sh
Usage: . /test.sh [使用者名称]
[root@pankuo shell]# 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
[root@pankuo shell]# vim cd.sh
#!/bin/bash
cd /var/log
touch cd.txt
[root@pankuo shell]# chmod +x cd.sh
[root@pankuo shell]# ./cd.sh
[root@pankuo shell]# cat /var/log/cd.txt
[root@pankuo shell]#
你会发现执行完我们还在当前的目录
[root@pankuo shell]# . cd.sh
[root@pankuo log]#
会发现这样操作就到了刚才脚本里的目录
.和source 会让脚本只在父shell 环境执行
子shell在开启子shell
[root@pankuo shell]# echo $SHLVL
1
[root@pankuo shell]# bash
[root@pankuo shell]# echo $SHLVL
2
[root@pankuo shell]# bash
[root@pankuo shell]# echo $SHLVL
3
[root@pankuo shell]#
每执行一次就进入下一层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指令,不能设定或取消环境变量,使用的命令名称中不可以含有/字符,内置命令参数不能使用含有/的文件等
阅读(1861) | 评论(0) | 转发(0) |