day64-shell编程之-变量基础

1、定义变量

值可变的量,称为变量
变量名=变量值,常说的变量,一般是变量名
变量名命名规则:字母数字下划线,不能是数字开头

2、环境变量和普通变量

2.1 环境变量(全局变量)

  • 可在创建他们的shell以及派生出来的任意子shell中使用
  • 环境变量包括内置的环境变量和自定义的环境变量,且通常为大写。
  • 环境变量的定义方式:

declare -x 变量名=value
export 变量名=value(常用)

  • 环境变量有四个文件,他们的执行顺序如下图所示:


  • 登陆shell会加载所有的环境变量
  • 非登陆shell可能会加载~/.bashrc或者/etc/bashrc(上图非绿色部分),然而有些定时任务以上两个根本不会加载,所以需要手动指定,建议在定义变量时定义到/etc/bashrc
  • 可以在环境变量文件中定义普通变量

2.2 普通变量

  • 普通变量只有在当前shell下才能使用
  • 定义方式
# 适用于一般场景,不适用于带有空格等字符
变量名=value
 
# 所见即所得的定义方式
变量名=’value’

# 解析双引号之内的变量
变量名=”value”
  • 注意点:(举例说明)
    1>变量如果后面有内容,一定要把变量括{}起来
    2>希望变量内容原样输出则加单引号
    3>希望获取变量中的命令执行结果用``或者$()
练习:通过非登录命令(ssh)执行java -version

3、临时变量和永久变量(了解)

如果按照变量的生存周期来划分的话,Linux变量可以分为两类:

永久变量:需要修改变量配置文件,使得变量永久生效
临时变量,使用export命令或者直接在当前shell中赋值的变量

作业:需要完全掌握

1>用source执行脚本和用bash执行的区别是什么
用source执行的脚本,变量会在父shell下生效,用. 也是
用bash执行的脚本,变量不会在父shell下生效

2>如何自定义环境变量
export aaa="dfs"

3>定义变量内容,不加引号、单引号、双引号、反引号结果有什么不同?该怎么用
不加引号:变量的连续传参
单引号:所见即所得
双引号:可以解析引号下面的内容
反引号:强制命令解析

4>在shell编程中,如果要访问变量值,可以变量前加一个$符号

5>下列对shell变量FRUTT操作,正确的是C
A)为变量赋值:$FRUTT=apple B)显示变量的值:fruit=apple C)显示变量的值:echo $FRUTT

4、shell特殊变量

4.1 参数特殊变量

[root@shelledu /server/scripts]# cat copy.sh 
#!/bin/bash
echo $0
echo $1
echo $#
[root@shelledu /server/scripts]# sh copy.sh a b c d
copy.sh
a
4

4.2 进程特殊变量

[root@shelledu /server/scripts]# vim test2-4-2.sh 
  8 echo "hello wwj"
  9 echo $?
 10 cat /root/2.txt
 11 echo $?
 12 exit 50                                              
                                                  
"test2-4-2.sh" 12L, 293C written
[root@shelledu /server/scripts]# sh test2-4-2.sh 
hello wwj
0
cat: /root/2.txt: No such file or directory
1
[root@shelledu /server/scripts]# echo $?
50

5、shell变量子串

shell变量子串实例:
[root@shelledu /server/scripts]# url=www.oldboy.com
[root@shelledu /server/scripts]# echo $url
www.oldboy.com
[root@shelledu /server/scripts]# echo ${url}.cn
www.oldboy.com.cn
[root@shelledu /server/scripts]# echo ${#url}
14
[root@shelledu /server/scripts]# echo ${url:4}
oldboy.com
[root@shelledu /server/scripts]# echo ${url:4:6}
oldboy
[root@shelledu /server/scripts]# txt=abcABCabcABC
[root@shelledu /server/scripts]# echo $txt
abcABCabcABC
[root@shelledu /server/scripts]# echo ${txt#*c}
ABCabcABC
[root@shelledu /server/scripts]# echo ${txt##*c}
ABC
[root@shelledu /server/scripts]# echo ${txt%c*}
abcABCab
[root@shelledu /server/scripts]# echo ${txt%%c*}
ab
[root@shelledu /server/scripts]# echo ${txt/abc/wwj}
wwjABCabcABC
[root@shelledu /server/scripts]# echo ${txt//abc/wwj}
wwjABCwwjABC

6、练习

6.1 请使用shell脚本打印下面语句中字符数不小于6的单词

I am teacher oldchang and I like eating and sleeping



6.2 写出shell脚本,通过传参的方式,传入以下内容,并打印下面语句中字符数不小于6的单词

7、变量数值计算

7.1 算数运算符

7.2 Shell的常见运算命令

[root@shelledu ~]# echo $((3+6))
9
[root@shelledu ~]# let a=4*5
[root@shelledu ~]# echo $a
20
[root@shelledu ~]# expr 12 + 3
15
[root@shelledu ~]# echo $[9+5]
14
[root@shelledu ~]# echo $[2**10]
1024
[root@shelledu ~]# declare -i b=2+5
[root@shelledu ~]# echo $b
7
[root@shelledu ~]# echo 2*4|bc
8
[root@shelledu ~]# echo "scale=3;10/3"|bc
3.333
[root@shelledu ~]# echo 100 4|awk '{print $1/$2}'
25
[root@shelledu ~]# echo 100 40|awk '{print $1/$2}'
2.5
[root@shelledu ~]# echo $a
20
[root@shelledu ~]# unset a   #取消变量
[root@shelledu ~]# echo $a

[root@shelledu ~]# 

8、变量传参

8.1 脚本变量传参的三种方式:

1>直接赋值

[oldchang@oldboy-node101 ~]$ cat 1.sh 
IP=127.0.0.1
echo $IP
[oldchang@oldboy-node101 ~]$ sh 1.sh 
127.0.0.1

2>传参方式

[oldchang@oldboy-node101 ~]$ cat 1.sh 
IP=$1
echo $IP
[oldchang@oldboy-node101 ~]$ sh 1.sh 127.0.0.1
127.0.0.1

3>read方式

[oldchang@oldboy-node101 ~]$ cat 1.sh 
read -p "请输入一个参数: " IP
echo $IP
[oldchang@oldboy-node101 ~]$ sh 1.sh 
请输入一个参数: 127.0.0.1
127.0.0.1

8.2 练习

1>使用脚本传参的方式实现整数的加、减、乘、除、取余、幂运算
2>使用脚本变量传参的三种方式,写一个脚本,通过传参方式修改主机名和ip地址
[root@shell-project /server/scripts]# cat  test-read.sh
#!/bin/bash
#使用脚本变量传参的三种方式,写一个脚本,通过传参方式修改主机名和ip地址
read -p "请输入要修改的主机名: " hostname
echo $hostname
hostnamectl set-hostname $hostname
read -p "请确认要修改那块网卡: " eths
echo $eths
if [ $eths = 'eth0' ];then
    read -p "请输入eth0的的新IP: " newip0
    sed -i "s#^IPADDR=.*\$#IPADDR=${newip0}#g" /etc/sysconfig/network-scripts/ifcfg-eth0
elif [ $eths = 'eth1' ];then
    read -p "请输入eth1的的新IP: " newip1
    sed -i "s#^IPADDR=.*\$#IPADDR=${newip1}#g" /etc/sysconfig/network-scripts/ifcfg-eth1
fi
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 229,836评论 6 540
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,275评论 3 428
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 177,904评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,633评论 1 317
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,368评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,736评论 1 328
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,740评论 3 446
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,919评论 0 289
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,481评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,235评论 3 358
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,427评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,968评论 5 363
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,656评论 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,055评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,348评论 1 294
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,160评论 3 398
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,380评论 2 379

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,427评论 0 5
  • Shell入门 什么是shell? Shell其实是一个命令解释器,作用是解释执行用户输入的命令以及程序等,用户每...
    酷酷的伟阅读 435评论 0 1
  • 什么是Shell变量     在初等数学数学方程式中,我们会经常碰到类似于这样的方程式:y=x+1 ,等号左右两边...
    Surpassme阅读 1,282评论 1 9
  • 本文是对Linux shell编程的一个学习比较,共包括如下章节的内容: 概述 基本语法 结构化语句 函数 小结 ...
    我是老薛阅读 842评论 0 5
  • 一、shell脚本介绍 1.1 开头(环境使用shebang机制) #!/bin/bash 必须写在文件首行 符号...
    优果馥斯阅读 3,323评论 0 1