Linux Shell编程及自动化运维实现之变量

一、shell前言

1、shell语言的特点

    SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称。
    Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。
    Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;
    作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
    它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序、
    建立文件并以并行的方式协调各个程序的运行。
    因此,对于用户来说,shell是最重要的实用程序,
    深入了解和熟练掌握shell的特性极其使用方法,是用好Unix/Linux系统的关键。 

2、shell的多种执行方式

准备测试脚本

[root@localhost tmp]#vim    1.sh 
echo    "hello 2020"
read    -p     "请输入您的姓名:"     name
echo     "哈哈 $name 是大笨蛋"

 执行1:

bash 1.sh

执行2:

sh 1.sh

执行3:

. 1.sh

执行4:

source  1.sh

多执行方式的区别

1和2的方式是子shell,3和4的方式是本shell。

准备测试环境

[root@localhost ~]# vim bash.sh
#!/usr/bin/bash
cd /home/
ls

使用 . bash 执行观察出路径改变了。说明影响的是当前。

使用bash 执行时,目录没有发生改变。

二、变量

   用固定的字符串去表示不固定的内容,便于修改

1、自定义变量

  用户自定义变量是最常用的变量类型,其特点是变量名和变量值都是由用户自由定义的。

定义变量

name=xiaoming  //定义变量
$name  //引用变量
echo $name  //查看变量

变量调用

   当我们需要提取变量中的内容时,需要在变量名之前加入"$"符号。那么最简单的变量调用就是通过 echo 命令输出变量的值。命令如下:

echo $变量名

变量的定义就是这么简单,但是如果不遵守变量定义规则,就会报错。比如:

#变量名不能以数字开头
#等号左右两侧不能有空格
#变量的值如果有空格,必须用引号包含

变量删除

unset  变量名

unset name
echo $name
输出为空

使用变量前:

[root@localhost ~]vim   ping.sh
ping    -c1      192.168.100.10     &>    /dev/null    &&   echo      192.168.100.10up     ||    echo      192.168.100.10down
[root@localhost ~]#chmod +x  ping.sh  //授权版本
[root@localhost ~]#./ping.sh  //执行脚本

注释: &&和||是三目表达式
&& 前面的命令成功。执行后面的命令
||前面的命令失败。执行后面的命令

使用变量后:

[root@localhost ~]vim   ping.sh
#!/bin/bash
ip=192.168.100.10
ping -c1 $ip &>/dev/null  && echo $ip  up ||   echo "$ip  down"
[root@localhost ~]# chmod +x  ping.sh
[root@localhost ~]#  ./ping.sh

交互定义变量

read从键盘读入变量值:

read  变量名

read -p "请输入您测试的IP地址:" ip  //-p 显示出来“请输入您测试的IP地址:”
ping -c1 $ip   &>/dev/null  && echo   " $ip up" || echo   "$ip
 down"

注意事项:3种引号

“”双引号:弱引用  

eg:[root@localhost ~]# schoo=1000 phone  错误示范,shell把空格识别做命令分隔符。
bash: phone: 未找到命令

[root@localhost ~]# schoo="1000 phone"  正确示范,变量值中的空格,被转义为一个普通符号
[root@localhost ~]# echo $schoo
1000 phone 执行成功。

变量值用双引号圈起来就成为了一个整体,空格就失去了含义。只是将字母与字母分隔开。

‘’单引号:强引用

[root@localhost ~]# schoo='$schoo 666'
    单引号,转义一切符号
[root@localhost ~]# echo $schoo
$schoo 666   $也被转义了。一切都被转义了。

被单引号圈起来的变量值里面的一切符号仅仅只是一个符号。

``反引号:优先执行

 [root@localhost ~]# schoo=`date`
        反引号是优先执行。先执行date的命令,再执行定义变量。
 [root@localhost ~]# echo $schoo
    2020年 05月 06日 星期三 14:57:13 CST
        所以看到变量的结果,是时间

注意:

变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

   命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
   中间不能有空格,可以使用下划线(_)。
   不能使用标点符号。
   不能使用bash里的关键字(可用help命令查看保留关键字)。
   起变量名,请使用五个字母以上。

2、环境变量

定义环境变量

方法一:export  back_dir2=/home/backup   

方法二:export back_dir1 ,将自定义变量转换成环境变量。

引用环境变量

$变量名或${变量名}

查看环境变量

echo $变量名  或 env       eg:env | grep  back_dir1

取消环境变量

unset  变量名

变量作用的范围

在当前shell和子shell有效

ps:如果想让变量应用于所有的shell中,需要将变量写到开机启动的配置文件中(/etc/profile)

3、位置变量和预定义变量

位置变量

$1 $2 $3 $4 $5 $6...

vim test.sh
#!/usr/bin/bash
echo "第2个位置参数是$2"
echo "第1个位置参数是$1"
echo "第4个位置参数是$4"
[root@localhost ~]# bash test.sh 1 2 3 4   //运行test.sh  后面要跟上参数
第2个位置参数是2
第1个位置参数是1
第4个位置参数是4
 

预定义变量

预先定义过的变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值 0表示成功 

三、变量运算

1、整数运算

① expr

num=1;num=2;expr $num1 + $num2

ps: + 加    - 减    \* 乘     /除  %取余    (*是任意字符 使用\转义一下)

② $(())

echo $(($num1+$num2))
echo $((num1+num2))
echo $((5-3*2)) 
echo $(((5-3)*2))
echo $((2**3))		//(幂)2的3次方
sum=$((1+2)); echo $sum

③ $[]

echo $[5+2]

④ let

let sum=2+3; echo $sum
//sum的值下次也可以调用

2、小数运算

yum -y install  bc  //bc是一个交互运算器,需要下载
echo "2*4" |bc
echo "2^4" |bc
echo "scale=2;6/4" |bc   //scale=2  保留小数点后面两位
awk 'BEGIN{print 1/2}'
echo "print 5.0/2" |python

猜你喜欢

转载自blog.csdn.net/yiweii/article/details/108347134