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变量,系统就会出现报错提示。
变量的删除:
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