bash相关符号以及变量

1、命令和文件自动补全

Tab只能补全命令和文件(RHEL6/Centos6)

2、常见的快捷键

^c			终止前台运行程序
^z			将前台运行的程序挂起到后台
^d			退出 等价exit
^l			清屏
^a | home	光标移到命令行的最前端
^e | end	光标移到命令行的后端
^u			删除光标前所有字符
^k			删除光标后所有字符
^r			搜索历史命令

3、常用的通配符

*: 匹配0或多个任意字符
?: 配任意单个字符
[list]: 匹配[1ist]中的任意单个字符
[!list]:匹配除1ist中的任意单个字符
{string1,string2,...}: 匹配string1,string2或更多字符串

简单案例

ls -l file*  #匹配以file开头,任意字符或没有字符结尾的文件

ls -l file?  #匹配以file开头,任意一个字符结尾(必须有一个字符)的文件

ls -l file*.txt  #匹配以file开头,.txt结尾的文件

ls -l file[1234]  #匹配file1,file2,file3,file4(file开头,1234结尾的文件)

ls -l file[!1-4]   #匹配除file开头,1234结尾,并且任意单个字符结尾的文件

touch file{1..10}  #创建file1到file10

4、bash中的引号

  • 单引号 ’ ’:会把引号的内容当成整体来看待, 禁止引用其他变量值, shell中特殊符号都被视为普通字符
  • 双引号" ":会把引号的内容当成整体来看待,允许通过$符号引号用其他变量值
  • 反撇号 ``:反撇号和$()一样,引号或括号里的命令会优先执行,如果存在嵌套,反撇号不能用

一个简单的例子对比bash中的单引号,双引号和反撇号

[root@fl Shell]# echo '$(date +%F)'  #单引号
$(date +%F)
[root@fl Shell]# echo "$(date +%F)"  #双引号
2023-01-16
[root@fl Shell]# echo `date +%F`	 #反撇号
2023-01-16
[root@fl Shell]# echo "`date +%F`"
2023-01-16
[root@fl Shell]# echo '`date +%F`'
`date +%F`

5、变量定义

变量名=变量值
变量名:用来临时保存数据的
变量值:就是临时的可变化的数据

A=hello 	#定义变量
echo $A 	#调用变量A
echo ${A}	#调用变量A

A=world	 	#变量可以改变

unset A		#取消变量

5.1 变量定义的规则

虽然可以给变量(变量名)赋予任何值。但是,对于变量名也是有要求的

  1. 变量名区分大小写
  2. 变量名不能有特殊符号,比如 ?* 等等
  3. 变量名不能以数字开头
  4. 等号两边不能有任何空格
  5. 变量名需要见名知意(优秀程序员必备)

5.2 变量定义的方式

基本赋值方式
直接赋值给一个变量

[root@fl Shell]# A=1234567
[root@fl Shell]# echo $A
1234567
[root@fl Shell]# echo ${A:2:4}
3456

说明:
$变量名和${变量名}的异同
相同点:都可以调用变量
不同点: ${变量名}可以只截取变量的一部分,而$变量名不可以

命令执行结果赋值给变量

[root@fl Shell]# hostname
fl
[root@fl Shell]# A=`hostname` #将hostname中的值赋给变量A
[root@fl Shell]# echo ${A}
fl

交互式定义变量
目的:让用户自己给变量赋值,比较灵活
语法:read [选项] 变量名
常见选项

选项含义
-p定义用户提示信息
-n定义字符数(限制变量值的长度)
-s不显示用户输入的内容
-t定义超时时间,默认单位为秒(限制用户输入变量值的超时时间)

用户自己定义变量值

[root@fl Shell]# read -p 请输入 name
请输入fl
[root@fl Shell]# echo ${name}
fl

[root@fl Shell]# read -p 请输入 -n 3 name
请输入123[root@flecho ${name}       #当输入字符个数已经等于限制个数时,会自动停止输入
123

[root@fl Shell]# read -p 请输入 -s name
请输入[root@fl Shell]# 			   #输入ffll,但是被隐藏了
[root@fl Shell]# echo ${name}
ffll

[root@fl Shell]# read -p 请输入 -t 3 name
请输入[root@fl Shell]# 			   #超过定义的超时时间,就会停止输入

变量值来自文件

read -p 请输入name name < name.txt		#将name.txt中的值赋值给变量name

定义有类型的变量(declare)

目的:给变量做一些限制,固定变量的类型,比如:整型,只读
用法:declare 选项 变量名=变量值
常见选项

选项含义举例
-i将变量看成整数declare -i A=123
-r定义只读变量declare -r B=hello
-a定义普通数组,查看普通数组
-A定义关联数组,查看关联数组
-x将变量通过环境导出declare -x AAA=12345 等于 export AAA=12345
[root@fl Shell]# declare -i A=hello		#无法将一个字符串赋值给一个整形变量
[root@fl Shell]# echo $A
0

[root@fl Shell]# declare -r B=fl
[root@fl Shell]# echo $B
fl
[root@fl Shell]# B=ff		#只读变量无法被修改
bash: B: readonly variable
[root@fl Shell]# unset B	#只读变量无法被删除
bash: unset: B: cannot unset: readonly variable

想要删除只读变量,只有exit退出后重新登录,因为B是一个临时变量


[root@fl Shell]# declare -x FL=fl	#导出环境变量
[root@fl Shell]# env | grep FL		#在环境变量中查找 FL
fl

5.3 其他变量定义

取出一个目录下的目录和文件:dirname和basename

A=/root/Shell/tmp/ip.txt
echo $A
/root/Shell/tmp/ip.txt
dirname $A  #取出目录
/root/Shell/tmp
basename $A	#取出文件
ip.txt

5.4 “变量内容的删除和替换”

一个"%“代表从右往左去掉一个/key/
两个”%“代表从右往左最大去掉/key/
一个”#“代表从左往右去掉一个/key/
两个”##"代表从左往右最大去掉/key/

url=www.baidu.com
echo ${#url}	#获取长度
13

echo ${url#*.}	#从左往右,删除第一个.以及之前的所有内容
baidu.com

echo ${url##*.}	#从左往右,删除最后一个.以及之前的所有内容
com

echo ${url%.*}	#从右往左,删除第一个.以及之后的所有内容
www.baidu

echo ${url%%.*}	#从右往左,删除最后一个.以及之后的所有内容
www

6、变量的分类

本地变量

当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效

[root@fl Shell]# A=hello
[root@fl Shell]# echo $A
hello
[root@fl Shell]# sh
sh-4.2# echo $A		#本地变量在子shell中无效

sh-4.2# 

环境变量

当前进程有效,并且能被子进程调用

  • env 查看当前用户的环境变量
  • set 查询当前用户的所有变量(临时变量与环境变量)
  • export 变量名=变量值 或者 变量名=变量值;export 变量名
[root@fl ~]# FFLL=123
[root@fl ~]# env | grep FFLL	#env中不包含临时变量,所有查不到
[root@fl ~]# set | grep FFLL	#set中包含临时变量,所有能查到
FFLL=123

用户退出再登录后,临时变量则失效
如果想要永久生效,则需要修改配置文件:
vim /etc/profile(全局配置,配置完成后,对每个用户都能生效) 或者 ~/.bashrc(针对某一个用户生效)
export FFLL=123
或者

全局变量

全局所有的用户和程序都能被调用,且继承,新建的用户也默认能调用

相关配置文件

文件名说明备注
$HOME/.bashrc当前用户的bash信息,用户登录时读取定义别名、umask、函数等
$HOME/.bash_profile当前用户的环境变量,用户登录时读取
$HOME/.bash_ logout当前用户退出当前shell时最后读取定义用户退出时执行的程序等
/etc/bashrc全局的bash信息,所有用户的都生效
/etc/profile全局环境变量信息系统和所有用户都生效

说明:以上文件修改后,都需要重新source让其生效或者退出重新登录

用户登录系统读取先关文件的顺序

  1. /etc/profile
  2. $HOME/.bash_profile
  3. $HOME/.bashrc

系统变量

系统变量(内置bash中的变量):shell本身已经固定好了它的名字和作用

内置变量含义
$?上一条命令执行后返回的状态。状态值为0表示执行正常,非0表示执行异常或错误
$0当前执行的程序或脚本名
$#脚本后面接的参数的个数
$*脚本后面所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开
$@脚本后面所有参数,参数是独立的,也是全部输出
$1-$9脚本后面的位置参数,$1表示第1个位置参数,依次类推
${10}~${n}扩展位置参数,第10个位置变量必须用{}大括号括起来(2位数字以上扩起来)
$$当前所在进程的进程号,如echo $$
$!后台运行的最后一个进程号(当前终端)
!$调用最后一条命令 历史中的参数

验证内置变量

#!/bin/env bash 

echo "\$0 = $0"
echo "\$# = $#"
echo "\$* = $*"
echo "\$@ = $@"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$10 = ${10}"

bash test3.sh a b c
$0 = test3.sh
$# = 3		#一共有3个参数
$* = a b c
$@ = a b c
$1 = a
$2 = b
$3 = c
$10 = 		#没有第10个参数,所以为空

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值