目录
shell编程主要是为了简化linux系统管理的。
shell中的变量是一种弱类型的变量,c,java等语言是一种强类型的语言。
linux中的所有的变量默认类型都是字符类型的
零、bash变量的分类
| 变量类型 | 说明 |
| 用户自定义变量 | 用户自定义的变量 |
| 环境变量 | 保存的是和系统操作环境相关的数据 |
| 位置变量 | 主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的 |
| 预定义变量 | 是bash中已经定义好的变量 |
一、用户自定义变量
定义变量:
变量名=变量值 # 如x=200 x=jiecao x="jie cao"(字符之间有空格的,需要加双引号)
变量的调用:
echo $变量名

变量的叠加,直接看下面的实例:
x=123
echo "$x"456 # 方式一推荐使用
echo ${x}789 # 方式二不推荐使用,原因是易记混淆
以上命令的结果如下:(变量叠加常用来为用户自定义的命令添加系统执行路径)

变量的查看
set # 会查看当前系统下正在运行的所有变量
选项:
-u 如果设定此选项,调用未声明变量时会报错(默认无任何提示)

其中,第一句命令:echo $y查看了一个不存在的变量y,系统并没报错,只是显示了一个空行,当调用set -u命令后,再查看不存的这个y变量,系统就会出现报错提示。
-e 如果设置此选项,在脚本执行过程中,一旦出现任何命令执行失败(返回非零的退出状态码),脚本就会立即退出
变量的删除:
unset
二、环境变量
环境变量是一种全局变量,他会存在于所有的shell中(包括父shell和子shell),局部变量只存在于创建他的那个shell中,在其子shell中看不到该变量。
设置环境变量:
export 变量名=变量值
或
变量名=变量值
export 变量名


通过pstree(查看进程树命令,发现此时系统有两个shell,是因为上一个过程执行了bash命令,进入了一个子shell,并且名字为bash的子shell,退出当前shell可以用exit命令,当系统中本身就只有一个shell在运行,如果在xshell中用exit命令,(xshell中使用exit命令会使xshell与linux虚拟机断开连接))

查看环境变量的办法:
env命令
删除环境变量的方法与用户自定义的变量的方法没有什么区别
常用的环境变量:
| HOSTNAME | 主机名 |
| SHELL | 当前的shell |
| TERM | 终端环境 |
| HISTSIZE | 历史命令条数 |
| SSH_CLIENT | 当前操作环境是用ssh协议连接的,这里记录客户端ip |
| SSH_TTY | ssh连接的终端是pts/1 |
| USER | 当前登录的用户 |

linux添加PATH路径的方法:
PATH="$PATH":/home/fz/coding
# 注意这种方式添加的路径在计算机重启后就会失效
# 要想永久的添加上路径需修改对应的配置文件

PS1
# 命令提示符设置
-\d:显示日期,格式为“星期月日”
-\h:显示完整的主机名。如默认主机名"localhost.localdomain"
-t:显示24小时制时间,格式为"HH:MM:SS"
-\A:显示24小时制时间,格式为“HH:MM"
-\u:显示当前用户名
-\w:显示当前所在目录的完整名称
-\W:显示当前所在目录的最后一个目录
-\$:提示符。如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$"

三、位置变量
位置变量
| 位置参数变量 | 作用 |
| $n | n为数字,0表示命令本身,$1~$9代表改命令的第一到第九参数,十以上的参数用大括号包含,如${10} |
| $* | 代表命令行中的所有的参数,$*把所有的参数看成一个整体 |
| $@ | 代表命令行中的所有的参数,$@把每个参数区别对待 |
| $# | 这个变量代表命令行中所有参数的个数 |
$n其实就类似于c语言中的形参的概念,用来接收外部传来的实参的值。
#!/bin/bash
#演示位置变量$n
#n为数字,0表示命令本身,$1~$9代表改命令的第一到第九参数,十以上的参数用大括号包含,如${10}
num1=$1
num2=$2
sum=$(($num1+$num2))
#变量sum的和是num1加num2
echo $sum
#打印变量sum的值
执行时对应的传入两个参数,就能计算两个数的和,如下所示:

四、预定义变量
| 预定义变量 | 作用 |
| $? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确 |
| $$ | 当前进程的进程号(PID) |
| $! | 后台运行的最后一个进程的进程号(PID) |


#!/bin/bash
echo "dang qian : $$"
find /home -name hello.sh & # &符号是把命令放在后台执行的意思
echo "hou tai: $!"

接收键盘输入的命令:read [选项] [变量名]
-选型:
-p "提示信息":在等待read输入时,输出提示信息
-t 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数:read命令只接受指定的字符数,就会执行
-s :隐藏输入的数据,适用于机密信息的输入
以下是一个名为read.sh的脚本,执行结果如下:
#!/bin/bash
#The filename is read.sh
read -p "please input your name: " -t 30 name
echo $name
read -p "please input your passwd: " -s passwd
echo
echo $passwd
read -p "please input your sex [M/F]: " -n 1 sex
echo
echo $sex

本文深入解析了Shell编程中四种主要变量类型:用户自定义变量、环境变量、位置变量和预定义变量的功能与用法。涵盖了变量定义、调用、叠加、删除及环境变量的设置与查看等关键知识点。

1765





