Linux——bash的基础特性(变量设置)(5)

bash的基础特性(5)
变量类型:
数据存储格式、存储空间大小、参与运算种类:
字符型
数值型:
整形
浮点型

		强类型:定义变量时必须指定类型、参与运算必须符合类型要求;调用为生命的变量会产生错误
		弱类型:无需指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无需事先定义可直接调用
			bash 
			
bash中的变量的种类:
	根据变量生效范围等标准:
		pstree:显示当前系统进程数
		bash:进入子进程
		本地变量:生效范围为当前shell进程;对当前shell之外的其他shell进程,
				  包括当前shell的子shell的进程都无效果
		环境变量:生效范围为当前shell进程以及子进程;
		局部变量:生效范围为当前shell进程中某代码片段(通常指函数);
		位置变量:$1,$2...来表示,用于让脚本代码中调用通过命令行给它的参数
				
		特殊变量:$?,$0,$*,$@,$#
		
		
	本地变量:
		变量赋值:name= 'value'
			可以引用:
				value:
					(1)可以是直接字符串: name= "username"
					(2)变量引用:name="$username"
					(3)命令引用: name='COMMAND',name=$(COMMAND)
		变量引用:${name},$name
			"":弱引用,其中的变量引用会被替换为变量值;
			'':强引用,其中的变量引用不会被替换为变量值,而保持元字符串
		
		显示已定义的所有变量
			set
		销毁变量:
			unset name
			
		
	环境变量:
		变量声明、赋值
			export name=value
			declare -x name=VALUE
		变量引用:${name},$name
		显示环境变量:
			export
			env
			printenv
		
		销毁变量:
			unset name
		
		bash有许多内建的环境变量:
			PATH,SHELL,UDI,HISTSIZE,HOME,PWD,OLD,HISFILE,PS1
			
		变量命名法则:
			1、不能使用程序中的表刘子:例如if,for
			2、只能使用数字、字母、下划线,不能数字开头
			3、见名知义
			
	只读变量:不可被修改删除
		readonly name
		declare -r name
		
	位置变量:
		在脚本代码中调用通过命令行传递给脚本的参数:
			$0:命令本身
			$1,$2对应第一个、第二个参数;
				换岗轮替操作:
				shift 【n】 
			$*:传递给脚本所有参数
			$@:传递给脚本所有参数
			$#:传递脚本的数量
			
bash的配置文件:
	按生效范围划分,存在两类:
		全局配置:
			/etc/profile
				/etc/profile.d/*.sh结尾的文件
			/etc/bashrc
		个人配置:
			~/.bash_profile
			~/.bashrc
			
	按功能划分,存在两类:
		profile类:为交互式登录的shell提供配置
			全局配置:/etc/profile		/etc/profile.d/*.sh结尾的文件
			个人配置:~/.bash_profile			~/.bashrc
		bashrc类:为非交互式登录的shell提供配置
		
	shell登录:
		交互式登录:
			直接通过终端输入账号密码登录:
			使用su - username登录
			
		非交互式登录:
			su username 
			图形界面下打开的终端
			执行脚本
			
			~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
		
	编辑配置文件定义的新配置的生效方式:
		(1) 重新启动shell进程;
		(2) 使用source或.命令进程;
		
		
	问题:
		1、定义对所用用户都生效的别名?
		2、让用户的PATH环境变量的值多出一个路径,
		
bash中的算数运算
	+ - * / % **
		
	实现算数运算:
		1、let var = 算数表达式
		2、var = $[算数表达式]
		3、var = $((算数表达式))
		4、var = $(expr arg1 arg2 arg3...)
		乘法符号有些场景中需要转义
		bash有内建的随机数生成器:$RANDOM
		
		
	增强型赋值:
			+= -= *= /= %=
			
	自增、自减
		let var +=1
			let var++
		
		let var -=1
			let var--
			
	练习1、写一个脚本
		计算/etc/passwd文件中的第10个用户和第20个用户的ID之和:
			#!/bin/bash
			userid1=$(head -n 10 /etc/passwd |tail -n 1|cut -d: -f3)
			userid2=$(head -n 20 /etc/passwd |tail -n 1|cut -d: -f3)
			
			useridsum=$[$userid1+$userid2]
			echo "uid sum: $useridsum"
		
	练习2、写一个脚本
		传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和
		#!/bin/bash
		
		spaceline1=$(grep "^[[:space:]]*$" $1 | wc -l)
		spaceline2=$(grep "^[[:space:]]*$" $2 | wc -l)
		
		echo "The sum of space line: $[$spaceline1+$spaceline2]"
		
		
	练习三、统计/etc,/var,/usr目录公有多少个一级子目录和文件
		
	
条件测试:
	判断某需求是否满足,需要由测试机制来实现:
		
	Note:专用的测试表达式需要由命令辅助完成测试过程:
	
	测试命令:
		test EXPRESSION
		[ EXPRESSION ]
		[[ EXPRESSION ]]
		Note:EXPRESSION两边必须由空白字符;
		
	bash的测试类型:
		数值测试
			-gt:大于
			-ge:大于等于
			-eq:等于
			-ne:不等于
			-lt:小于
			-le:小于等于
			
		字符串测试
			==:等于
			>:大于
			<:小于
			!=:不等于
			=~:左侧字符串是否能够被右侧PATTERN所匹配
				Note:一般用[[  ]]
			-z "STRING":测试字符串是否为空,空真不空假
			-n "STRING": 测字符串是否不空,不空真,空假
			
			Note:测字符串比较时,用到的操作数都应该使用引号
		文件测试
		
		
bash自定义退出状态码:
	exit [n]:自定义退出状态码;
		注意:脚本中一旦遇到exit命令,脚本会立即终止:终止退出状态取决于exit命令后的数字
			  如果未指定退出状态码,整个脚本的退出状态码取决于最后一条命令的退出状态码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值