什么是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)通过缩进让代码更易读。

shell脚本简介的更多相关文章

  1. Linux Shell——bash shell 脚本简介

    bash shell 脚本简介 shell 运行环境 如果你运行的是 Unix 或 Linux 系统,例如 Ubuntu,Red Hat,SUSE Linux,还有macOS,都是内置了 bash s ...

  2. Shell脚本之一 Shell脚本简介

    一.什么是shell? 我们平时所说的 Shell 可以理解为 Linux 系统提供给用户的使用界面.Shell 为用户提供了输入命令和参数并可得到命令执行结果的环境.当一个用户登录 Linux 之后 ...

  3. SHELL脚本--简介

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 脚本都以#!/bin/bash开头,“#”称为sharp,“! ...

  4. Linux Shell脚本简介

    Shell 诞生于 Unix,是与 Unix/Linux 交互的工具,单独地学习 Shell 是没有意义的,请先参考Unix/Linux入门教程,了解 Unix/Lunix 基础. 近几年来,Shel ...

  5. Linux shell脚本学习(一)

    一.shell脚本简介 shell脚本是用shell脚本语法将shell命令组织起来形成的文件形式.Shell脚本与Windows/Dos 下的批处理相似,主要为了将大量命令通过一个纯文本文件一次执行 ...

  6. Shell脚本编程(一):初识shell script

    Shell简介 Shell是一个命令解释器,它是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核 ...

  7. Shell脚本的学习(一)

    Shell脚本的学习(一) 一)代码式shell脚本简介 1.下载 Xshell 5 建一个文件夹 mkdri home/data ; 1)查看一个在data里建一个1.sh 查看是否建立成功. 2) ...

  8. shell脚本之编程基础介绍

    1.shell脚本简介 1.1 shell是什么? shell是一个命令解释器,它在操作系统的最外层负责直接与用户对话,把用户的输入解释给操作系统:并处理各种各样的操作系统的输入,将结果输出到屏幕返回 ...

  9. Shell简介:1分钟理解什么是Shell 脚本语言 解释器 以及编译器和编译语言

    Shell简介:1分钟理解什么是Shell 脚本语言 解释器 以及编译器和编译语言 现在我们使用的操作系统(Windows.Mac OS.Android.iOS 等)都是带图形界面的,简单直观,容易上 ...

随机推荐

  1. vue 路由别名 路由跳转

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Java tomcat Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost

    关于 下面问题是因为(8005, 8080, 8009) 被原tomcat占用了. Several ports (8005, 8080, 8009) required by Tomcat v9.0 S ...

  3. 爬虫系列4:Requests+Xpath 爬取动态数据

    爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...

  4. windows环境 springboot+docker开发环境搭建与hello word

    1,下载安装 docker toolbox 下载地址:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ docker t ...

  5. 卷积神经网络总结CNN【转载】

    卷积神经网络CNN总结 从神经网络到卷积神经网络(CNN)我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经 ...

  6. mysql免解压版安装教程步骤

    首先我这里演示的是mysql-5.6.27-winx64这个免解压的版本 添加环境变量(如添加了则跳过该步骤) 操作如下: )右键单击我的电脑->属性->高级系统设置(高级)->环境 ...

  7. Python课程第四天作业

    1.定义一个函数,该函数可以实现控制台输入,最终返回一个int类型的正整数 def chr_to_int(): user_input = input('请输您要转换的字符串:') if user_in ...

  8. 基础总结(01)--css清除浮动几种方法

    1.父元素添加overflow:auto/hidden; 2.父元素内加空div,添加样式clear:both; 3.父元素添加伪类; .parent:after{ content:''; displ ...

  9. mybatis入门篇:Mybatis高级查询

    1.ResultMap的association与collection association与collection功能类似,区别是一对一与一对多,这里以association为例. 首先说明一下需求: ...

  10. CentOS7下安装Redis5.0.2

    1.下载redis 地址 http://download.redis.io/releases/redis-5.0.2.tar.gz 2.解压tar -zxf redis-5.0.2.tar.gz 3. ...