bash shell学习日记(1)初始shell脚本与shell练习环境准备

目录

第 1 章 初始bash shell脚本

1.1 什么是shell

1.2 shell与shell脚本关系

1.3 shell脚本使用场景

第 2 章 bash shell脚本学习环境准备与练习

2.1 实验环境

2.2 vim编辑器设置

2.3shell脚本热身分析

总结

                                                       第 1 章 初始bash shell脚本

    基础Linux shell就如翻译者一般,而由众多shell命令堆积出的shell脚本可以实现自动化运维从而大大提高工作效率,因此shell在linux运维中一项必不可少的技术。本章将会初始bash shell

注意:没有完美的程序语言只有适合的程序语言。

1.1什么是shell?

  1)shell是由C语言编写的应用程序,是用户和操作系统交互时的一座桥梁。

  2)shell提供了一种界面和接口可以访问操作内核

  3)shell既是命令语言 也是程序设计语言

1.2 shell与shell脚本关系

   shell脚本是由shell编写的一种脚程序

1.3 shell脚本场景分析:

    shell脚本适用于系统管理等一些场景

    shell 不适用于以下场景:

       1)资源密集型的任务,尤其在需要考虑效率时(比如,排序,hash等等)
       2)需要处理大任务的数学操作,尤其是浮点运算,精确运算,或者复杂的算术运算(这种情况一般使用C++或FORTRAN来处理)

       3)有跨平台移植需求(一般使用C或Java)
       4)复杂的应用,在必须使用结构化编程的时候(需要变量的类型检查,函数原型等等)

       ·············

本章以思维导图方式呈现:bash shell学习日记(1)初始shell脚本与shell练习环境准备_第1张图片

                                                             第 2 章  环境准备

       要学一门语言首先要有对应的环境,本章讲述shell脚本学习的环境准备和一些脚本举例。

2.1实验环境

  1)在vmware16上创建一台最小化安装的centos7.9

centos7.9镜像地址http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso

    2)xshell7远程连接软件

2.2 vim编辑器设置

    1)设置高亮 (centos7默认为高亮可忽略)

    2)自动显示行号  

     设置方法:vim /etc/vimrc 在最后行添加set number

2.3脚本热身练习 

    脚本目的:清除日志文件 

    分析三个脚本体会脚本不断完善的过程

     脚本(1)

    #!/bin/bash

    #清除日志文件

    #以root身份运行

    cd /var/log

    cat /dev/null > messages

    cat /dev/null > wtmp

    echo "Logs cleaned up."    

  问题分析:
  1.这两个日志文件是做什么的?
  2.wtmp这个文件名,是什么意思?
  3.为什么用cat/dev/nul1>来清除日志?
  4.如果不是root用户执行这个脚本,如何控制错误信息?

   解答:
  1.系统的日志文件通常记录内核的消息、一些服务的公共信息、报错信息,通常可以查看日志来判断系统的运行情况

  2./var/log/wtmp 二进制文件 其中记录每个用户登录成功的信息(btmp是失败的消息)

last输出为wtmp中内容

  3.保证文件权限、属性不变,降低风险

    脚本(2)

   说明:对(1)脚本的完善 在其中设置变量(变量:被赋值的字符串、执行实际数据的指针)达到了在不通环境下简单配置脚本变量使其适合当前环境的目的。

   #!/bin/bash

   #清除日志文件

  #以root身份运行

  #以后,在这个地方增加一个逻辑

  # 如果不是root用户执行脚本提示错误信息 然后退出

  #如果使用变量,这样更加灵活,优雅

  LOG_DIR=/var/log

  cd $LOG_DIR

  cat /dev/null > messages

  cat /dev/null > wtmp

  echo "Logs cleaned up."

  exit #这个命令是一种正确,合适的退出办法。

  #不带任何参数的exit,将返回退出的状态码。

  脚本(3)对脚本(2)的完善利用了判断语句使脚本具有一定分析问题的能力

  (关于其中一些语句格式和概念日后会继续更新,在此只做了解即可)

#!/bin/bash

#清除日志文件

#说明:这个脚本脚本更新了许多新的特性

LOG_DIR=/var/log

#定义环境变量

ROOT_UID=0 #$UID=0时,用户都有root的权限

LINES=50 #默认保存的行数

#定义退出代码

E_XCD=66 #退出代码:表示不能修改目录位置

E_NOROOT=67 #退出代码:表示不是root用户

#判断是否是以root用户身份来运行脚本

if [ "$UID" -ne "$ROOT_UID" ]

then

echo "Must be root to run this script."

exit $E_NOROOT

fi

#测试这个脚本是否传递有参数(非空)

#保存messages日志最后50条

if [ -n "$1" ]

then

lines=$1

else

lines=$LINES #如果没有在命令指定,就使用默认值

fi

cd $LOG_DIR

#处理日志文件前,判断是否在/var/log目录中

#检查cd操作

if [ pwd != "$LOG_DIR" ] #或 if [ "$PWD" != "$LOG_DIR" ]

then

echo "Can't change $LOG_DIR."

exit $E_XCD

fi

#保留messages最后部分而不是全部清楚

tail -$lines messages > mesg.tmp

mv mesg.tmp messages

#旧的办法不在需要了,新的办法更加安全吗?

#cat /dev/null > messages

cat /dev/null > wtmp

echo "Logs cleaned up."

exit 0

#退出时返回0,0表示成功

 脚本(3)分析(针对shell脚本中三个判断语句作用分析)

【判断1】

if [ "$UID" -ne "$ROOT_UID" ] 中-ne是关系运算符,检查前后两个操作数的值是否相等,如果不等为真。

【判断2】

if [ -n "$1" ]

then

lines=$1

else

lines=$LINES #如果没有在命令指定,就使用默认值

fi

其中-n是一个字符串运算符,检查后面给定的字符串的操作数长度是否为0,如果为0返回否,不为0返回真

即如果$1(特殊变量:保留系统功能,传递给脚本第一个参数)存在/传递的有参数,要保留的行数就为$1值

$0脚本名称

【判断3】

if [ pwd != "$LOG_DIR" ]

!= 表示不等

补充:

tail -$lines messages > mesg.tmp tail显示出的是一个全新的文件

本章以思维导图模式呈现如下:

bash shell学习日记(1)初始shell脚本与shell练习环境准备_第2张图片

 总结:此两章初始shell脚本,通过练习的三个脚本分析,得到没有完美的计算机语言只有适合的语言,没有完美的脚本,脚本是一个在不断完善的过程。

你可能感兴趣的:(bash,学习,开发语言)