shell脚本基础 -----简单脚本的实现

运行环境:centos7
一、shell脚本的简单介绍
shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
-- shell是一种脚本语言;
-- 可以使用逻辑判断、循环等语法;
-- 可自定义函数;
-- shell是系统命令的集合;
-- shell脚本可以实现自动化运维,能大大增加我们的运维效率
可以在当前系统查看当前默认shell

echo $SHELL


二、shell脚本的变量

1、局部变量

局部变量的作用域被限定在创建它们的shell中。local函数可以用来创建局部变量,但仅限于函数内使用。局部变量可以通过简单的赋予它一个值或一个变量名来设置,用declare内置函数来设置,或者省略也可。局部变量仅对当前shell有效,子shell不继承!可通过set命令查看所有的局部变量。

image.png

实验证明设置的变量只在当前shell有效。

2、全局变量

全局变量通常又称环境变量,以区别于局部变量,全局变量,顾名思义,不仅仅对当前的shell有效,也对子shell有效,export局部变量名称可以设置为全局变量。

export 变量=值

[root@localhost^.^ ~]#export Name="guodong"  (设置全局变量)
[root@localhost^.^ ~]#echo $Name
guodong
[root@localhost^.^ ~]#bash   (进入子shell)
[root@localhost^.^ ~]#echo $$(查看当前shell号)
10933
[root@localhost^.^ ~]#echo $Name
guodong
[root@localhost^.^ ~]#bash  (进入‘孙子’shell)
[root@localhost^.^ ~]#echo $$(查看当前shell号)
10962
[root@localhost^.^ ~]#echo $Name
guodong
[root@localhost^.^ ~]#

image.png

bash命令可以进入子shell,当前shell号为10933,查看变量依旧继承,继续进入‘孙子’shellshell号为10962,查看变量仍然继承,故设置的为全局变量。

export设置的全局变量只在当前终端有效。

设置全局环境变量,对所有用户都生效

  • etc/profile: 此文件为系统的每个用户设置环境信息。当用户登录时,该文件被执行一次,并从 /etc/profile.d 目录的配置文件中搜集shell 的设置。一般用于设置所有用户使用的全局变量。

  • /etc/bashrc:bash shell 被打开时,该文件被读取。也就是说,每次新打开一个终端 shell,该文件就会被读取。

修改/etc/profile文件后需要重新启动才能生效,也可用source命令使其立即生效


3、位置变量

就是Bash将传递给脚本的参数保存在位置变量中,以便于在脚本中引用这些参数

直接举例说明:

人生的第一个脚本

以后大家肯定会写大量的脚本,所以可以创建一个简单的脚本自动生成所需要的脚本文件,自动进入该文件编辑,并拥有标准格式。

#!/bin/bash     (#!约定的标记,告诉系统使用哪一种shell)

echo "#!/bin/bash" >$1     将双引号里面的内容添加到$1文件里面,如果有,则覆盖,没有就创建

echo "# ------------------------------------------" >>$1 追加内容到该$1文件里
echo "#Filename: $1" >>$1
echo "# Revision: 1.0" >>$1
echo "# Date: $(date +"%F")" >>$1
echo "#Author: wang" >>$1
echo "#Email: [email protected]" >>$1
echo "#Website: www.magedu.com" >>$1
echo "#Description:" >>$1
echo "#------------------------------------------" >>$1
echo "#helloworld" >>$1
echo " " >>$1
chmod +x $1(自动给$1文件添加权限)
vim + $1  (自动进入该$1文件里面编辑)

image.png

通过/root/bin/脚本文件名称  新创建的文件名称 执行脚本

image.png

当执行时自动进入vim编辑该文件模式

image.png

就这样第一个脚本写好了!这也是一个位置变量的例子。(#后面是注释内容,执行脚本时系统不执行)


4、变量赋值

直接举例

编写脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件

通过上面创建的脚本可以快速创建一个新的标准的脚本文件。

该文件的内容如下:

#!/bin/bash      

GESHU=$(ls -d /etc/*|wc -l)    (将查找的etc目录下所有文件(不包括隐藏文件)列出并通过wc -l 显示个数,将变量的值赋值给GESHU

GESHU1=$(ls -d /etc/.*|wc -l) (将查找的etc目录下所有隐藏文件列出并通过wc -l 显示个数,将变量的值赋值给GESHU1

GESHU2=$(ls -d /var/*|wc -l)   (将查找的var目录下所有文件(不包括隐藏文件)列出并通过wc -l 显示个数,将变量的值赋值给GESHU2

GESHU3=$(ls -d /var/.*|wc -l)   (将查找的var目录下隐藏文件列出并通过wc -l 显示个数,将变量的值赋值给GESHU3

GESHU4=$(ls -d /usr/*|wc -l)   (将查找的usr目录下所有文件(不包括隐藏文件)列出并通过wc -l 显示个数,将变量的值赋值给GESHU4

GESHU5=$(ls -d /usr/.*|wc -l)   (将查找的usr目录下所有隐藏文件列出并通过wc -l 显示个数,将变量的值赋值给GESHU5Sum=$[$GESHU+$GESHU1+$GESHU2+$GESHU3+$GESHU4+$GESHU5](将五个文件的值进行加减操作,将变量值赋值给Sum
echo /etc/var/usr目录中共有$Sum个!!!!


image.png

image.png

当然可以通过ls -a 命令直接列出所有文件,包括隐藏文件。



猜你喜欢

转载自blog.51cto.com/13866901/2151319