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都能用
运行脚本相当于换了条线路 ---在当前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
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 |