系统 CentOS 7
基础知识
什么是Shell
Shell俗称壳,是用户和系统(内核)交互的命令解析器。
查看系统支持的shell解析器
# cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/tcsh /bin/csh
其中常用shell介绍:
/bin/sh 是Unix最初使用的Shell(Bourne Shell)。
/bin/bash是Bourne Again Shell是Bourne Shell的扩展,简称bash。一般是大部分liunx类操作系统的默认Shell。
/bin/tcsh 是C shell的扩展版本。
/bin/csh C Shell,C语言风格Shell,已经被tcsh取代。
系统中还存在/sbin/nologin 用于控制用户禁止登录系统。
查看当前shell解析器
# echo $SHELL /bin/bash
Shell脚本基础
脚本文件首行需要指定Shell解析器的类型
#!/bin/bash
注释方式
单行注释
# 单行注释
多行注释
:<<! 多行的 注释 !
脚本执行方式
创建脚本文件vim /root/shell/helloworld.sh
#!/bin/bash # 这是一个单行注释 echo "hello world" :<<! 这 是 多 行 注 释 !
1. sh执行
# sh helloworld.sh hello world
2. bash执行
# bash helloworld.sh hello world
3. 路径执行
需要文件具有可执行权限,相对路径需要使用“./”接文件名,或直接写绝对路径。
# ll total 0 -rw-r--r--. 1 root root 0 Nov 28 07:45 helloworld.sh # ./helloworld.sh -bash: ./helloworld.sh: Permission denied # /root/shell/helloworld.sh -bash: /root/shell/helloworld.sh: Permission denied
增加可执行权限
# chmod u+x helloworld.sh # ll total 4 -rwxr--r--. 1 root root 34 Nov 28 07:46 helloworld.sh # ./helloworld.sh hello world # /root/shell/helloworld.sh hello world
Shell环境
Shell环境有两种分类方式:
1. 交互式Shell和非交互式Shell
交互式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
非交互式shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
2.登录shell和非登录shell
主要区别就是是否需要用户体用用户名和密码登录系统。
但是这两种shell在启动时加载的配置文件是不一样的。
登录shell加载配置文件及顺序:
1. 执行 /etc/profile
2. 执行 /et/profile.d/*.sh
3. 执行 ~/.bash_profile
4. 执行 ~/.bashrc
5. 执行 /etc/bashrc
非登录shell加载配置文件及顺序:
1. 执行 ~/.bashrc
2. 执行 /etc/bashrc
3. 执行 /etc/profile.d/*.sh
加载配置文件不同会造成系统环境变量等信息不同,通常情况下,我们都是输入用户名和密码登录系统的。
如何查看Shell环境
# echo $0 -bash
输出结果说明
-bash : 表示是登录环境。
bash :表示是非登录环境。
注意:$0 在shell中使用可获取Shell环境,在脚本中使用可获取Shell脚本文件名称。
执行脚本时指定环境
已登录环境执行脚本可增加参数 “-l”或“--login”
# sh --login helloworld.sh
已非登录环境执行脚本
# bash 加载Shell非登录环境 # sh helloworld.sh
su切换用户
已登录环境切换用户增加“-l”或“--login”
# su redis -l
已非登录环境切换用户
# su redis