Shell是命令解释器,是Unix/Linux系统中用户和内核交互的接口。Shell脚本是shell程序设计语言编写的程序。
一、交互式或登录(注册)shell
交互式注册(交互式登录)shell:输入用户名(/etc/passwd)、密码(/etc/shadow)成功登录系统,即调用交互式注册shell。
会运行初始化文件,设置用户运行环境。
交互式非注册shell:在提示符下,输入任意shell,如ksh等,将进入交互式非注册shell。
会运行对应shell初始化文件,也会继承注册shell的环境。
非交互式shell:主要是运行shell脚本。
不执行初始化文件,但会继承注册shell环境。
交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令。
这种模式被称作交互式是因为shell与用户进行交互。
这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。
当你退出后,shell也终止了
非交互式模式以shell script(非交互)方式执行。
在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。
当它读到文件的结尾EOF,shell也就终止了
二、shell和shell脚本
Shell是命令解释器,是Unix/Linux系统中用户和内核交互的接口。
Shell脚本是shell程序设计语言编写的程序。是包含若干linux/unix命令的可执行程序文本文件。
bsh /bin/sh solaris ,AIX
ksh /bin/ksh
csh /bin/csh
bash /bin/bash
cat /etc/shells 查看设备所有shell
系统账号的shell使用 /sbin/nologin ,此时无法登陆系统,即使给了密码也不行。
所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。
举例来说,各个系统账号中,打印作业有lp这个账号管理,www服务器有apache这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已。
查看当前shell:
[root@u1acatap01 configs]# echo $SHELL
/bin/bash
[root@u1acatap01 configs]#
三、编写shell脚本
[root@APROAPP shw_temp]# cat >helloworld.sh
#!/bin/bash
echo "Hello World !"
编辑脚本内容保存至.sh为后缀的文件。可以使用vi filename.sh或cat >filename.sh(以ctrl+d结束编辑,ctrl+backspace或ctrl+u删除输入的字符),也可以使用UE,Notepad或记事本等文本编辑工具编辑文件,然后上传至服务器。
四、运行shell脚本
实例echo.sh
[root@mrhcatxq01 install_cacti]# cat echo.sh
#!/bin/bash
cd
echo "hello world!"
[root@mrhcatxq01 install_cacti]# pwd
/install_cacti
[root@mrhcatxq01 install_cacti]# sh echo.sh
hello world!
[root@mrhcatxq01 install_cacti]# pwd
/install_cacti
[root@mrhcatxq01 install_cacti]# source echo.sh
hello world!
[root@mrhcatxq01 ~]# pwd
/root
[root@mrhcatxq01 ~]# cd -
/install_cacti
[root@mrhcatxq01 install_cacti]# . echo.sh
hello world!
[root@mrhcatxq01 ~]# pwd
/root
[root@mrhcatxq01 ~]# cd -
/install_cacti
[root@mrhcatxq01 install_cacti]# ./echo.sh
-bash: ./echo.sh: Permission denied
[root@mrhcatxq01 install_cacti]# chmod +x echo.sh
[root@mrhcatxq01 install_cacti]# pwd
/install_cacti
[root@mrhcatxq01 install_cacti]# ./echo.sh
hello world!
[root@mrhcatxq01 install_cacti]# pwd
/install_cacti
[root@mrhcatxq01 install_cacti]#
1.运行shell脚本的方式一般有三种
1)使文件具有可执行权限,在脚本当前目录直接执行 ./script.sh
2)使用解释器执行 /bin/sh script.sh 或 sh script.sh
3)使用source,在当前shell执行 . script.sh 或 source script.sh
2.Shell脚本不同运行方式的区别
1)增加可执行权限再执行脚本
启动子进程,使用脚本中指定的shell执行脚本如:#!/bin/sh;若脚本未指定#!/bin/sh,会使用默认shell执行脚本
2)使用shell执行脚本
启动子进程,使用直接指定的shell执行脚本,而不管脚本里面是否执行解释器,如 sh script.sh
3).(空格)脚本或 source 脚本
当前shell默认的shell解释器执行脚本,不创建子进程
3.第一行指定解释器路径,如#!/bin/bash