linux中的shell编程之变量

shell编程主要是为了简化linux系统管理的。

shell中的变量是一种弱类型的变量,c,java等语言是一种强类型的语言。

linux中的所有的变量默认类型都是字符类型的

零、bash变量的分类

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

猜你喜欢

转载自blog.csdn.net/qq_40420795/article/details/84865878