一、什么是shell
shell 是一个命令解释器
二、什么是shell脚本
清除/var/log/messages 日志文件内容的简单脚本命令
[root@cinder01 shell]# cat old_2.2.sh
#!/usr/bin/env bash
# 清除日志文件内容,版本1
cd /var/log
cat /dev/null > messages
echo "logs cleaned up."
[root@cinder01 shell]#
优化版:
[root@cinder01 shell]# cat old_2.3.sh
#!/usr/bin/env bash
# Version:v1.0
# 包含命令,变量和控制流的语句清除messages日志文件的shell脚本
LOG_DIR=/var/log
ROOT_UID=0 # UID为0的用户,即root用户
# 脚本需要使用root用户权限运行,因此,对当前用户进行判断,对不符合要求的用户发出友好提示,并且终断程序运行
if [ "$UID" -ne "$ROOT_UID" ] # 如果当前用户不是root用户,则不允许执行脚本
then
echo "must be root to run this script." # 给出提示后退出
exit 1
fi
# 如果却换目录不成功,则给出友好提示,并退出
cd $LOG_DIR || {
echo "cannot change to necessary directory."
exit 1
}
# 经过上面的判断,用户和目录都是正确的,下面判断情况messages文件内容,清除成功,则打印成功提示
cat /dev/null > messages && {
echo "Logs cleaned up."
exit 0 # 退出前返回0,0 表示成功,1表示失败
}
echo "Logs cleaned up fail."
exit 1
[root@cinder01 shell]#
查看系统支持的shell类型
[root@cinder01 shell]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/usr/bin/tmux
[root@cinder01 shell]#
两种方法查看系统默认的shell
[root@cinder01 shell]# echo $SHELL
/bin/bash
[root@cinder01 shell]#
[root@cinder01 shell]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@cinder01 shell]#
shell 脚本的建立和执行
在Linux系统中,默认使用 vi/vim 编写shell脚本
规范shell脚本
1. 脚本开头(第一行)
#!/usr/bin/env bash
指定shell解释器,"#!" 表示幻数,shell脚本在执行时,确定shell脚本运行的解释器(必须为脚本顶端的第一行)
2. bash 和 sh 的区别
sh 为 bash的软链接
3. 脚本注释
符号 "#" 表示单行注释
多行注释:
方法1:
:<<!
注释内容
!
方法2:
: '
注释内容 ,: 与 ' 之间带有空格
'
4. shell脚本的执行
略
[注:] "." 和 "source" 功能相同,都是读入脚本并执行脚本
5. shell 脚本的规范和习惯
1) shell 脚本第一行指定脚本编辑器
#!/usr/bin/env bash
或:
#!/bin/bash
2) shell脚本开头加版本 版权等信息
# Author:xxx.xxx
# Time:2017-08-28 04:14:13
# Version:v1.0
# Description: This scripts function is ....
3) shell 脚本中尽量不使用中文,包括注释(防止中文乱码问题)
4) shell 脚本使用 .sh 为扩展名
5) shell 脚本存放在固定目录下
shell 脚本代码的书写习惯
1) 成对的符号尽量一次写完,然后退格在符号里面增加内容,防止遗漏
2) 中括号[] 两端至少要有1个空格
3) 控制流语句,应一次性将格式写完,再添加内容
4) 通过缩进让代码更易读
5) 对常规变量的字符串定义变量值应加双引号,并且等号前后不能有空格
6) 脚本中的单引号,双引号及反引号必须为英文状态下的符号
转载于:https://blog.51cto.com/xieshengsen/1969562