首页 > 其他分享 >第二章 变量

第二章 变量

时间:2022-09-20 16:02:53浏览次数:52  
标签:echo www 变量 day02 egon scripts 第二章 root

一、变量介绍

1什么是变量?

量指的是记录事物的状态
变指的是事物的状态是可以发生变化的
#变量本质就是一种数据存储的机制,变量的数据都是存放于内存中的

2为何要有变量?

程序=数据+功能
程序运行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态以及状态的变化
#比如
	英雄2的等级为1,打怪升级(变)为10
	僵尸的存活状态为true,被植物打死了,于是变为false
	人的名字为jh,也可以修改为JH

二、变量的使用

1先定义、后引用

1.先定义
	#1.语法:变量名=值
	#2.注意:等号左右两边不能有空格!!!
	#3.例如
	[root@localhost shell]# name="jh"
	
2.后引用
	[root@db04 /scripts/day02]# ip="192.168.1.10"
	[root@db04 /scripts/day02]# echo $ip
	192.168.1.10
	
	注意:如果是打印百分比,建议使用$(变量名)%
	[root@db04 /scripts/day02]# percent=44
	[root@db04 /scripts/day02]# echo ${percent}%
	44%

2删除变量

[root@db04 /scripts/day02]# ip="192.168.1.10"
[root@db04 /scripts/day02]# echo $ip
192.168.1.10
[root@db04 /scripts/day02]# unset ip
[root@db04 /scripts/day02]# echo $ip

[root@db04 /scripts/day02]# 

三、变量的三大组成部分

定义一个变量由三大部分组成:
1.变量名:用来访问到变量值的
2.赋值符号:将变量值的内存地址绑定给变量名
3.变量值:记录的事物的状态,即我们存的数据

1变量名的命名规范

定义变量把数据存到内存中不是目的,目的是以后要取出来用,而变量名就是用来取变量值的,而变量的名字直接表明了所存值的意义,可见变量名的命名非常重要。

#变量名的命令应该见名知意,同时遵循如下规则
以字母或下划线开头,剩下的部分可以是:字母、数字、下划线,最好遵循下述规范:
  1.以字母开头
  2.使用中划线或者下划线做单词的连接
  3.同类型的用数字区分
  4.对于文件最好加上拓展名
  	如: sql_bak.tar.gz,log_bak.tar.bz2 
  5、不要带有空格、?、*等特殊字符
  6、不能使用bash中的关键字,例如if,for,while,do等
  7、不要和系统环境变量冲突
  
#变量名的命名风格:
  1、纯小写字母加下划线
	age_of_oldboy=18
				
  2、驼峰体
	AgeOfOldboy=18

2变量值的三种来源

1.直接赋值

# 1. 显式赋值:变量名=变量值
示例:
ip1=192.168.11.200
school="Shanghai oldboy"
today1=`date +%F`
today2=$(date +%F)

# 2、应用示例
[root@localhost ~]# url="www.baidu.com"
[root@localhost ~]# echo $url
www.baidu.com
[root@localhost ~]# url="www.sina.com.cn"
[root@localhost ~]# echo $url
www.sina.com.cn

2.从位置参数获取变量值,即从命令获取

从调用脚本时传入的位置参数获取变量值:./b.sh a1 a2 a3
需要用到$n获取第n个位置参数值,超过10需要用${n},如下
$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
# 示例
[root@egon ~]# cat b.sh
#!/usr/bin/env bash
echo ${0}
echo $1
echo $2
echo $3
echo $4
echo $5
echo $6
echo $7
echo $8
echo $9
echo ${10}
echo ${11}
echo ${12}

# 运行
[root@egon ~]# chmod +x b.sh
[root@egon ~]# ./b.sh a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15
./b.sh
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
a11
a12
# 企业使用:可以实现脚本的不同功能(服务程序管理脚本-启动功能 关闭功能 重启功能)
server.sh  start|stop|restart

3.与用户交互获取变量值,即通过键盘键入来获取

何为交互,即输入输出

# 1. read 接收用户的输入,即从键盘读入变量值
read 变量名
read -p "提示信息: "  变量名
read -t 5 -p "提示信息: "  变量名  # -t指定秒数
read -n 2 变量名  # -n读取的字符个数

应用示例:vim first.sh
back_dir1=/var/backup
read -p "请输入你的备份目录: " back_dir2
echo $back_dir1
echo $back_dir2

企业使用:可以根据需求调整变量值,可以便于新员工快速掌握企业脚本使用

#2.输出,把程序的处理结果反馈给用户:
#2.1 echo命令格式化输出					
[root@localhost ~]# user="egon"
[root@localhost ~]# age=18
[root@localhost ~]# echo "my name is $user my age is $age"

还可以输出带颜色(了解即可)
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[34m 黄色字 \033[0m"
echo -e "\033[41;33m 红底黄字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"

案例:
========egon=========
年龄:18
体重:70
身高:181
等级:10
=====================

#2.2 printf命令的格式化输出
%s
%d
%7.3f  打印浮点数,总宽度为7,小数位保留3位,并且四舍五入
printf "my name is %s, my age is %s\n" "egon" 18
printf "my name is %s, my age is %d\n" "egon" 18
						
printf "my name is %s, my salary is %s\n" "egon" 3.337
printf "my name is %s, my salary is %.2f\n" "egon" 3.337
printf "my name is %s, my salary is %8.2f\n" "egon" 3.337
												
x="egon"
y=18
printf "my name is %s, my age is %s\n" $x $y

三、预定变量

$* # 获取所有的位置参数
$@ # 获取所有的位置参数
$# # 获取所有的位置参数个数
$$ # 获取当前shell进程的pid 
   # 此外,可以使用只读变量来获取父进程的PID:$PPID、获取执行脚本的用户ID:$UID
$? 上一个命令的返回值 0表示成功 非0代表失败

#示例1:
[root@egon ~]# chmod +x b.sh
[root@egon ~]# ./b.sh a1 a2 a3 a4 a5
a1 a2 a3 a4 a5
a1 a2 a3 a4 a5
5
18988
1
[root@egon ~]# cat b.sh
#!/usr/bin/env bash
echo $*
echo $@
echo $#
echo $$
ping -c1 192.168.11.10 &>/dev/null
echo $?

#示例2:
[root@egon ~]# vim ping.sh
#!/bin/bash
ping -c2 $1 &>/dev/null
if [ $? = 0 ];then
echo "host $1 is ok"
else
echo "host $1 is fail"
fi
[root@egon ~]# chmod +x ping.sh
[root@egon ~]# ./ping.sh 192.168.11.10

了解:
如果我们想从命令行中获取脚本调用者传入的参数值,用$n可以取到,但如果脚本调用者在命令行传入的参数个数不固定,那么此时就需要用$*或$@来获取了
$*与$@获取的是所有位置参数,$0除外

当脚本调用者的传参形式如下是
[root@localhost ~]# ./script.sh 命令1 命令2 命令3

四、常量

相对于变量,常量就是不可以被改变的量,即只能读不能改,所以又称为只读变量
使用readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变

[root@egon ~]# x=111
[root@egon ~]# readonly x
[root@egon ~]# x=666

-bash: x: 只读变量

五、基本数据类型

1.整型:年龄、个数、号码
	age=10
	level=3
	
2.浮点型:薪资、身高、体重
	salary=3.3
	height=1.81
	
	
3.字符串类型:名字、国籍、名人名言、ip地址等描述性质的内容
	msg="hello"
	msg='hello'  # 硬引用,包含的字符均无特殊意义
	
	ps:shell是一门解释型的、弱类型、
		hobbies="抽烟 喝酒 烫头"
			
4.数组类型:
	1)普通数组
		hobbies=("抽烟" "喝酒" "烫头")
		echo ${hobbies[0]}
			
		declare -a array1
         array1[0]=111111111111111

		[root@www ~]# array2=([2]=3.3 [1]=1.1 [3]=4.4)
		[root@www ~]# echo ${array2[1]}
		1.1
		[root@www ~]# echo ${array2[3]}
		4.4
		[root@www ~]# echo ${array2[2]}
		3.3
		[root@www ~]# echo ${array2[0]}

		[root@www ~]#
		
	2)关联数组
		[root@www /scripts/day02]# name="egon"
		[root@www /scripts/day02]# age=18
		[root@www /scripts/day02]# gender="male"
		[root@www /scripts/day02]# info1=("egon" 18 "male")
		[root@www /scripts/day02]# declare -a |grep info1
		declare -a info1='([0]="egon" [1]="18" [2]="male")'
		[root@www /scripts/day02]# 
		[root@www /scripts/day02]# declare -A info2=(["name"]="egon" ["age"]=18 ["gender"]="male")
		[root@www /scripts/day02]# declare -A | grep info2
		declare -A info2='([gender]="male" [name]="egon" [age]="18" )'
		[root@www /scripts/day02]# echo ${info2["name"]}
		egon
		[root@www /scripts/day02]# 


标签:echo,www,变量,day02,egon,scripts,第二章,root
From: https://www.cnblogs.com/GAO321/p/16711325.html

相关文章

  • seaborn 第二章:不同形式的散点图
    二、散点图importseabornassnsimportmatplotlib.pyplotaspltsns.set_theme(style='whitegrid')#加载diamonds数据集diamonds=sns.load_dataset('diamon......
  • 前端面试总结02-变量类型和计算
    值类型与引用类型值类型:   引用类型常见值类型:consta//undefinedconsts='abc'constn=100constb=trueconsts=Symbol('s')常见引用类型:constobj={x:......
  • 如何使用 JavaScript 在 Camunda 外部任务中使用瞬态变量
    你怎么做使用JavaScript的Camunda外部任务中的瞬态变量在本文中,让我们看看如何在使用java脚本实现Camunda外部任务的同时使用瞬态变量。先决条件:1.卡蒙达7.1......
  • 第十一章 Ansible-playbook变量注册和Facts缓存
    一、变量注册概述当absible的模块在运行之后,其实都会返回一些result结果,就像是执行脚本,我们有的时候需要脚本给我们一些return返回值,我们才知道,上一步是否可以执行成功,但......
  • 第十章 Ansible-playbook变量基础
    一、ansible变量概述ansible变量提供了便捷的方式来管理Ansibleplaybook的每一个项目中的动态值,比如nginx-1.6.3这个软件包的版本,在其它地方或许会反复使用,那么如果讲此......
  • 环境变量
    环境变量,简单来说就是描述程序执行环境的一组变量。1、什么程序执行环境?环境已经基础词汇呢,我们通常都用环境去解释别的词,想一下,日常生活怎么用环境。你到一个新地方,我问......
  • C语言:利用指针交换两个变量的值
    #include<stdio.h>voidfun(int*a,int*b){int*k;k=a;a=b;b=k;}voidfun1(int*a,int*b){intk;k=*a;*a=*b;*b=k;}main(){inta=......
  • C语言:指针变量的值变化,则对应新的变量,原变量的值不变
    #include<stdio.h>//指针变量的值变化,则对应新的变量,原变量的值不变main(){intm=1,n=2;int*p=&m,*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d"......
  • 《Linux系统 —— 环境变量》
    查看当前环境变量:查看当前环境变量:echo$PATH或env 设置环境变量的三种方法:1.临时设置exportPATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATHexportLD_......
  • Centos7环境变量设置
    Centos7环境变量设置最近,我从cnaaa.com上购买了云服务器,开通了centos系统。1、环境变量的含义程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变......