什么是变量
- 变量必须以字母或下划线开头,名字中间只能由字母,数字和下划线组成
- 变量名的长度不得超过 255 个字符
- 变量名在有效范围内必须唯一
- 变量默认类型都是字符串
变量的分类
-
字符串
-
整型
-
浮点型
-
日期型
用户自定义变量
变量的值是自己定义的
变量名不能为数字开头
等号左右两边不能有空格
定义变量
name="zhangsan"
age=10
输出变量值
echo $name
# zhangsan
echo $age
# 10
值默认都是字符串
# 值默认都是字符串
x=1
y=2
z=3
k=$x+$y+$z
echo $k
# 1+2+3
在赋值的时候引用变量
m="$x"2
n=${x}2
echo $m
# 2
echo $n
# 2
set
查询系统中默认所有已经生效的变量,包括系统变量,也包括自定义变量
set | grep zhangsan
# name=zhangsan
unset
删除变量
unset name
环境变量
环境变量是全局变量,而自定义变量是局部变量
自定义变量会在当前的 shell 中生效,而环境变量会在当前 shell 以及其子 shell 中生效,也是临时生效的
这种变量主要保存的是和系统操作环境相关的数据
变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的
自定义环境变量
export 变量名=变量值
export envName=prod
env
仅仅用来查看环境变量,而不看到本地变量
env | grep envName
常用环境变量
变量名 | 含义 | 示例 |
---|---|---|
HOSTNAME | 主机名 | HOSTNAME=localhost |
SHELL | 当前的 shell | SHELL=/bin/bash |
HISTSIZE | 历史命令条数 | HISTSIZE=1000 |
SSH_CLIENT | 当前操作环境如果是用 SSH 连接的话,这里会记录客户端 IP | SSH_CLIENT=192.168.1.100 57596 22 |
USER | 当前登录的用户 | USER=root |
path
-
系统搜索路径:
echo $PATH
-
如果想把一个自定义的脚本
/root/shells/hello.sh
直接可以执行:- 方式一:把这个文件拷贝到目标目录下:
- 方式二:把脚本所在目录添加到环境变量中的 PATH 路径中
# linux 系统中的分割符是 : # window 系统中的分隔符是 ; export PATH="$PATH":/root/shells # 可以执行 hello.sh
位置参数变量
-
这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
|位置参数变量 |作用|
|-----------|—|
|$n |n 为数字,$0 代表命令本身,$1-$9 代表第 1 到第 9 个参数,10 以上的参数需要用大括号包含,如 ${10}|
|$* |这个变量代表命令中所有的参数,$* 把所有的变看数看成一个整体|
|$@ |这个变量也代表命令行中所有的参数,不过$@把每个参数进行区分|
|$# |这个变量代表命令行中所有参数的个数| -
$n 示例:
SHELLSHELL#!/bin/bash num1=$1 num2=$2 sum=$((num1+num2)) echo $sum
# 第一个参数 3,第二个参数 4 sh sum.sh 3 4
-
$* 示例:
SHELLSHELL#!/bin/bash for i in "$*" do echo "i=$i" done
sh for2.sh 1 2 3 i=1 2 3
-
$@ 示例:
SHELLSHELL#!/bin/bash for i in "$@" do echo "i=$i" done
sh for.sh 1 2 3 i=1 i=2 i=3
-
$# 示例:
SHELLSHELL#!/bin/bash echo "$#"
sh for3.sh 1 2 3 3
预定义变量
-
是脚本中已经定义好的变量,变量名不能自定义,变量作用也是固定的
位置参数变量 作用 $? 最后一次执行的命令的返回状态。0 表示正确执行,非 0 表示不正确执行 $$ 当前进程的进程号(PID) -
示例代码
echo $? echo $$
read
-
语法:read [选项] [变量名]
选项 含义 -p 提示信息,在等待 read 输入时,输出提示信息 -t 秒数: read 命令会一直等待用户输入,使用此选项可以指定等待时间 -n 字符数,read 命令只接受指定的字符数,就会执行 -s 隐藏输入的数据,适用于机密信息的输入 -
示例代码:
SHELLSHELL#!/bin/bash read -p 'please input your name:' -t 5 name echo -e "\n" read -p 'please input you gender[m/f]:' -n 1 gender echo -e "\n" read -p 'please input your password:' -s password echo -e "\n" echo $name,$gender,$password
sh read.sh
shell 编程基础
上一篇