什么是shell?
shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕返回给用户。这种对话方式可以是交互的方式(从键盘输入命令,可以立即得到shell的回应),或非交互(执行脚本程序)的方式。
下图的黄色部分就是命令解释器shell处于的操作系统中位置形象图解。
什么是shell脚本?
:清除/var/log下messages日志文件的简单命令脚本。
#把所有命令放在一个文件里堆积起来就形成了脚本,下面是一个最简单的命令堆积形成的shell脚本
#root身份运行
#清楚日志
cd /var/log
cat /dev/null > messages
echo "Logs cleaned up."
上述脚本存在如下问题:
1、如果不是root用户无法执行清理日志。
2、无流程控制语句,没有判断和逻辑。
示例2:包含命令、变量和流程控制语句的清除/var/log下messages日志文件的shell脚本。
#!/bin/bash
#清除日志脚本
LOG_DIR=/var/log
ROOT_UID=0 #$UID为0的时候,用户才具有root用户的权限
#使用root运行
if [ "$UID" -ne "$ROOT_UID" ]
then
echo "Mast be root to run this script."
exit 1
fi
cd $LOG_DIR || {
echo "Cannot change to necessary directory." >&2
exit 1
}
cat /dev/null > messages && echo "Logs cleaned up."
exit 0
#退出之前返回0表示成功,返回1表示失败。
拓展:清空日志及文件内容的三种方法。
[root@lamp ~]# echo >test.log
[root@lamp ~]# >test.log
[root@lamp ~]# cat /dev/null > test.log
shell脚本在运维工作中的地位
shell脚本很擅长处理纯文本类型的数据,而linux系统中几乎所有的配置文件(如nfs、rsync、httpd、nginx、lvs等)、多数启动文件都是纯文本类型的文件。因此利用shell可以在linux系统中发挥巨大作用。
shell脚本语言的种类
在UNIX/LINUX中主要有两大类shell。
Bourne shell包括sh、ksh和bash。
Bourne shell (sh)
Korn shell (ksh)
Bourne Again shell (bash)
POSIX shll (sh)
C shell包括csh和tcsh。
C shell (csh)
TEXES/TOPS C shell(tcsh)
shell脚本语言是若类型语言,较为通用的shell有标准的Bourne shell(sh)和C shell(csh)。其中Bource shell(sh)已经被bash shell取代。
查看系统的shell。
[root@lamp ~]# cat /etc/shells
/bin/sh
/bin/bash #功能更强大
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
常用操作系统的默认shell
Linux是bourne agaion shell(bash)。
Solaris和FreeBSD缺省的是Bourne shll(sh)。
AIX下是korn shell(ksh)。
HP-UX缺省的是POSIX shell(sh)。
查看CentOS默认shell。
第一种方法。
[root@lamp ~]# echo $SHELL
/bin/bash
[root@lamp ~]# echo $shell
bash
第二种方法。
[root@lamp ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
更改默认的shell配置文件。
[root@lamp ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
shell脚本的建立和执行
、子shell会直接继承父shell的变量、函数等。2、如果希望父shell调用子shell的变量、函数等,用source或"."点号执行脚本。
shell脚本开发的基本习惯
1)脚本第一行指定脚本解析器。
#!/bin/sh或#!/bin/bash
2)脚本开头加版本版权等信息
#Date: 07:00 2018-07-26
#Mail:xxxxx@xxx
#Author:Created by golden
#Function:This scripts function is ...
#Version:1.3
提示:可以配置vim编辑文件时自动加上以上信息,方法是修改~/.vimrc配置文件。
3)脚本中不用中文注释
尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰。
4)脚本以.sh为扩展名命名。
5)代码书写优秀习惯技巧
1、成对的符号内容尽量一次写出来,防止遗漏。
2、"[]"中括号两端要有空格,书写时即可留出空格[ ],然后在退格书写内容,先书写一对中括号,然后退一格,然后在输入两个空格,再退一格。
双中括号"[[]]"也是如此。
3、流程控制语句一次书写完,在添加内容。
if语句格式一次完成。
if 条件内容
then
内容
fi
for循环格式一次完成。
for
do
内容
done
6)通过缩进让代码更易读。