1.11

                  变量有关内容

内容:

1. 变量的介绍

2. 变量的分类

3. awk计算

4. vim中编辑文本技巧

5. 定义变量

第1章 变量

1.1 什么是变量    

lidao=1

 

###秘籍

藏经阁里面的武功秘籍  书籍的名字 新版葵花宝典  ==== 变量名字 lidao

     查看 书籍  新版葵花宝典  ==== 查看变量里面的内容  $lidao

                      向书籍 加入新的内容      ==== 向变量中放入内容    lidao=12       

[root@oldboyedu-39-nb scripts]# lidao=lidao.blog.51cto.com

[root@oldboyedu-39-nb scripts]# echo $lidao

lidao.blog.51cto.com

 

1.2 查看 $ ${}   修改 变量名字=.....   临时

${}前后是两部分,用于分隔        -------金庸新著

[root@oldboyedu-39-nb ~]# week=10

[root@oldboyedu-39-nb ~]# echo $week

10

[root@oldboyedu-39-nb ~]# echo $weekday   系统认为weekday是个变量

[root@oldboyedu-39-nb ~]# echo ${week}day 所有用花括号括起来

10day

1.3 变量的分类:     

环境变量    普通变量    特殊变量($n   $0  $#  $?)

1.3.1 环境变量(全局变量)

env   只显示全局变量

 

自定义环境变量   放入 /etc/profile  永久生效

  OLDBOY=blog.oldboyedu.com           建议所有环境变量名均为大写

export OLDBOY=blog.oldboyedu.com export命令定义变量,在哪里shell都能用

图片1.png 

运行脚本相当于换了条线路   ---在当前shell中新打开一个子shell

  永久生效      /etc/profile

[root@oldboyedu43-lnb scripts]# OLDBOY=10                   定义普通变量

[root@oldboyedu43-lnb scripts]# echo $OLDBOY                在当前shell读取变量√√√√

10

[root@oldboyedu43-lnb scripts]# cat env.sh                  把普通变量写进脚本

#!/bin/bash

echo $OLDBOY

[root@oldboyedu43-lnb scripts]# sh env.sh                   不可以运行,脚本相当于又打开一个子shell

 

[root@oldboyedu43-lnb scripts]# sh -x env.sh                -x 显示脚本运行过程

+ echo

[root@oldboy-gao oldboy]# source env.sh                    source可以运行脚本中的普通变量

10

[root@oldboyedu43-lnb scripts]# env |grep OLDBOY            env查看系统存在的环境变量

[root@oldboyedu43-lnb scripts]# export OLDBOY=10            定义环境变量

[root@oldboyedu43-lnb scripts]# env |grep OLDBOY            env可以查看

OLDBOY=10

[root@oldboyedu43-lnb scripts]# sh env.sh                   当前环境下任何子shell可以运行变量

10

 

1.3.2 与用户环境变量有关的文件 目录

 1.全局环境变量配置文件

 /etc/profile/etc/bashrc/etc/profile.d/(用户登录到系统 会运行这个目录下面的脚本或命令) 

 2.用户环境变量配置文件          

 ~/.bash_profile~/.bashrc

3. /etc/profile.d /etc/motd 区别

/etc/motd       文件,写啥显示啥(大佛)

sl  小火车

cowsay     ×××牛

让用户登录时运行cowsay命令

[root@oldboy-gao ~]# cat  /etc/profile.d/cowsay.sh     把命令写进脚本放到/etc/profile.d目录下

#!/bin/bash                                              

/usr/bin/cowsay 啦啦啦

[root@oldboy-gao ~]# chmod +x /etc/profile.d/cowsay.sh       给脚本x权限

[root@oldboy-gao ~]# ll /etc/profile.d/cowsay.sh

-rwxr-xr-x. 1 root root 47 Jan 13 06:35 /etc/profile.d/cowsay.sh

1.3.3 linux内置的环境变量  

shell通过环境变量来确定登录用户名,命令路径,终端类型,登录目录等

LANG  PATH  SHELL   UID    HOSTNAME

 

取消变量 unset  OLDBOY=1

1.3.4 局部变量 普通变量

gao=1 如果不用export,,直接定义          ---局部变量(普通变量)

[root@oldboy-gao ~]# sh /server/scripts/show.sh

                变量不能被执行因为在新的子shell

图片2.png

 

1.3.5 命名规则

字母  数字  下划线

数字不能打头

   

小结:

1.sed 查找  删除    替换    

            不删除  不替换

2.精简linux开机自启动服务

3.shell-什么是变量

4.分类-环境变量(全局)

5.如何创造一个环境变量 export     放在/etc/profile

6.普通变量-$  ${}   金庸新著          {金庸新}

 

1.4 awk计算

[root@oldboy-gao ~]# awk 'BEGIN{print 3+2,3-1}'

5 2

第一个里程碑:awk  -v  定义一些 awk自己用的变量  一个v定义一个变量

shell脚本中$1表示脚本的第一个参数

[root@oldboy-gao ~]# cat  /server/scripts/cal.sh          

#!/bin/bash

num1=$1

num2=$2

 

awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1-n2}'

awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1+n2}'

awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1*n2}'

awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1/n2}'

[root@oldboy-gao ~]# sh /server/scripts/cal.sh 1 2

-1

3

2

0.5

 

1.5 vim中快捷编辑文本技巧

1.5.1 vim批量编辑

操作方法:

1. 确保不是编辑模式

2. Ctrl +v 上下键选择你要编辑的行

3. 按大写I

4. 输入内容

5. esc

1.5.2 vim批量删除去

Ctrl +v 并选择你要编辑的行

delete删除

 

   

1.5.3 特殊的变量

 $1 --$数字     $#      $?

 $0  脚本的名字

 $#  脚本参数的个数

第二个里程碑:$1 $2   ---$数字

linux脚本中 $1 表示这个脚本的第一个参数   

脚本与命令行的桥梁 中介    使用脚本的时候  把命令的内容传入到脚本中

[root@oldboy-gao ~]# cat /server/scripts/show.sh

#!/bin/bash

echo $1 $2

[root@oldboy-gao ~]# sh /server/scripts/show.sh

 

[root@oldboy-gao ~]# sh /server/scripts/show.sh a b

a b

 

:计算 1+2   

[root@oldboyedu-39-nb ~]# echo 1+2

1+2

[root@oldboyedu-39-nb ~]# echo 1+2|bc

3

[root@oldboyedu-39-nb ~]# echo $((1+2))

3

[root@oldboyedu-39-nb ~]# echo $((3+4))             两个小括号

7

[root@oldboyedu-39-nb ~]# echo $((a+b))

0

##使用变量省事 方便

[root@oldboyedu-39-nb ~]# a=1

[root@oldboyedu-39-nb ~]# b=2

[root@oldboyedu-39-nb ~]# echo $((a+b))

3

能不能更简便一些呢

[root@oldboyedu-39-nb ~]# cat /server/scripts/cal.sh

#!/bin/bash

a=$1                 a代表第一个参数

b=$2                 b代表第二个参数

echo $((a+b))            

 

[root@oldboyedu-39-nb ~]# sh /server/scripts/cal.sh a b  ###必须是数字

/server/scripts/cal.sh: line 4: a: expression recursion level exceeded (error token is "a")

[root@oldboyedu-39-nb ~]# sh /server/scripts/cal.sh 20 30000

30020

[root@oldboyedu-39-nb ~]# #sh /server/scripts/cal.sh 20  30000

[root@oldboyedu-39-nb ~]# ###                  $1  $2    空格分隔每个参数

练习:

##要求:给cal2.sh脚本传入三个参数 ,显示三个参数相乘的结果

[root@oldboyedu-39-nb ~]# sh /server/scripts/cal2.sh 10 20 30

6000

[root@oldboyedu-39-nb ~]# cat /server/scripts/cal2.sh

#!/bin/bash

a=$1

b=$2

c=$3

echo $((a*b*c))

 

第三个里程碑:$#   表示你这个脚本一共有多少个参数 参数的个数

用这个脚本文件show.sh

[root@oldboyedu-39-nb scripts]# cat show.sh

#!/bin/bash

echo $1 $2  $3

echo $#

[root@oldboyedu-39-nb scripts]# sh show.sh a b c

a b c

3                                                  输出参数的个数

[root@oldboyedu-39-nb scripts]# sh show.sh a b c b d df ef d

a b c

8

 

第四个里程碑: $?   显示上一个命令是否执行成功  如果命令执行成功 会显示0   如果命令执行失败,则会显示不是0

如果是0,成功   如果不是0就失败了。

[root@oldboyedu-39-nb scripts]# echo hello

hello

[root@oldboyedu-39-nb scripts]# echo $?

0

[root@oldboyedu-39-nb scripts]# echo hello

[root@oldboyedu-39-nb scripts]# ho hello

-bash: ho: command not found

[root@oldboyedu-39-nb scripts]# echo $?

127

 

小结

###$1 $2 {$数字  $# } (一般放脚本里)    $? (哪都可以)  含义

第五个里程碑:$0     显示文件名

第2章 定义变量(如何向变量中放内容)

1) name=      普通变量

2) read  从命令行读取内容放到变量中

  -p  提示语句 , 则屏幕就会输出提示语句

  -t   等待时间

  -s   关闭回显,用于密码输入

效果: read -p 请输入你的用户名  user

     read -s -p 请输入你的密码  pass

[root@oldboy-gao ~]# read oldboy

lalala                               俩个命令效果相同

[root@oldboy-gao ~]# oldboy=lalal

 

[root@oldboyedu-39-nb scripts]# read -p "please input :" oldboy      编辑提示信息

please input :oldboyedu.com                       变量    

[root@oldboyedu-39-nb scripts]# echo $oldboy

oldboyedu.com

实例2-1 cal.sh脚本从$1 $2参数传递方式 改为 使用read命令方式(必须要会)

[root@oldboy-gao oldboy]# cat /server/scripts/cal.sh

#!/bin/bash

read -t5 -p "input n1 n2:" num1 num2    

               -p 参数  放最后面

awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1-n2}'

awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1+n2}'

awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1*n2}'

awk -vn1=$num1 -vn2=$num2 'BEGIN{print n1/n2}'

[root@oldboy-gao oldboy]# sh /server/scripts/cal.sh

input n1 n2: 100 22

78

122

2200

4.54545