变量
计算机内存单元,其存放的值可以改变。
字母数字和下划线,但不能以数字开头
在linux中,变量的默认类型为字符串类型
变量的定义中,若要使用空格,需要使用’ab c’或者"ab cd"
变量中,可以使用转义符""
变量值的叠加,使用"
变
量
名
"
、
"
变量名"、"
变量名"、"{变量名}"
name=$(命令)
环境变量建议是用大写,便于区分
name = $(date)
name = 'a b'
name = "a b"
name = linux
分类:
用户自定义变量
环境变量:主要保存的是和系统操作环境相关的数据
位置参数变量:用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用固定
用户自定义变量
变量定义
name = shen
变量调用
echo $name
变量叠加
aa=123
aa= "$aa"456 #aa=123456
aa=${aa}789 #aa=123456789
变量查看
set #查看系统中所有变量
变量删除
unset aa #删除变量aa
环境变量
用户自定义变量只在当前shell中生效
环境变量,会在当前shell及所有子shell中生效
配置文件中的环境变量,所有shell生效
定义
sh #进入子shell
bash #进入子shell
pstree #确定进程数
exit #退出当前shell
export name = shen #定义环境变量
age = 18
export age
查询变量
env #查询环境变量,set是所有变量
删除变量
unset name
系统环境变量PATH
1、作用
冒号分隔的路径
系统查找命令的路径
2、变量叠加
PATH = "$PATH":/tmp/test #冒号之后添加要添加的路径,仅临时生效
配置文件的修改,才能永久生效
PS1
只能使用set查看
1、作用
定义系统提示符的变量
[root@loacalhost ~]#
#用户名root
#当前主机名@localjost
#当前文件名~
#提示符
\d:显示日期,格式为“星期 月 日”
\h:显示简写的主机名
\t:显示24小时制时间,“HH:MM:SS”
\T:显示12小时制时间,“HH:MM:SS”
\A:显示24小时制时间,“HH:MM”
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
#:执行的第几个命令
$:提示符,root用户为#,普通用户为$
echo $PS1 #当前提示符格式
[\u@\h \W]\$
PS1 = '[\u@\t \w]\$ ' #\$之后最好加一个空格
位置参数变量
位置环境变量 | 作用 |
---|---|
$n | n代表数字,$0代表命令本身,$1-$9代表第1-9个参数,十以上的参数,需要使用大括号 ${10} |
$* | 命令行中所有的参数,所有参数为一个整体 |
$@ | 命令行中所有的参数,对每个参数区分对待 |
$# | 命令行中所有参数的个数 |
脚本内容:
#!/bin/bash
echo $0
echo $1
echo $2
echo "A total of $# parameters" #参数个数
echo "The parameters is : $*" #所有参数
echo "The parameter is : $@" #所有参数
输出
[root@18:15:08 /tmp]# ./canshu.sh 11 22 33
./canshu.sh
11
22
A total of 3 parameters
The parameters is : 11 22 33
The parameter is : 11 22 33
接收键盘输入
#直接将输入赋值给变量
read -p "name: " name #输出提示信息
read -t 30: age #等待用户30秒输入,
read -n 10 -p "sex,0-girl,1-boy:": sex #只接受指定字符数10个
read -s -p "password : ": password #隐藏输入的数据
$* 和 $#的区别
for i in "$*"
#$*中的所有参数是一个整体,次循环只执行一次
do
echo "The parameter is : $i"
done
X = 1
for j in "$@"
#$@中的每个参数都是独立的,次循环会执行n次
do
echo "the parameter $x is : $i"
X=$(($x+1))
done
预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。返回为0,上一条正确执行,返回非0,上一条命令执行错误 |
$$ | 当前进程的进程号pid |
$! | 后台运行的最后一个进程的进程号pid |
ls #正确执行
echo $?
#输出0
ls jiweo #文件不存在
echo $?
#output:2
脚本内容
#!bin/bash
echo "the current pid is : $$"
输出
the current pid is 3682