架构师的成长之路初片-shell-1(变量)

三,变量

常量 固定不变的值

变量 以固定的名称存放有可能发生变化的值,可以提高脚本对

环境的适应力

1: 自定义变量,变量名称可以用大小写字母,数字,下划线,不能

使用特殊符号,不能以数字开头,等号两边不能有空格

基本格式: 变量名=变量的值

x=10   //定义变量,创建变量,给变量赋值

echo $x  //调用变量

unset  x  //取消变量的定义

x=  //将变量的值定义为空,效果同上

echo ${x}RMB  //为变量添加大括号避免与后续内容发生混淆

1: 环境变量,由系统提前定义好,使用时直接调用

USER 当前用户名    UID 当前用户id  HOME 当前用户家目录

SHELL 当前用户的解释器  HOSTNAME 主机名  PWD 当前位置

PS1 一级提示符  PS2 二级提示符   PATH 存储了系统中执行指令的所在目录

可用: echo $USER   来查看变量的值

############################################################################

3: 预定义变量与位置变量

$1  执行脚本后跟随的第一个位置参数

$2  执行脚本后跟随的第二个位置参数

$3  执行脚本后跟随的第三个位置参数

$*  所有位置参数

$#  所有位置参数的个数

$$  随机的进程号

$?  判断上一条指令是否成功,0是成功,非0是失败

#####################################################################################

例子:

#!/bin/bash

useradd $1    //创建用户时调用第1个位置变量

echo $2 | passwd --stdin $1   //配置密码时调用第2个位置变量

执行脚本时,使用bash test06.sh xyz 123  即可创建xyz账户并配置密码123

env | grep HOST  //env可以显示所有环境变量,通常可以配合grep过滤查询

xyz=8888

set | grep xyz=  //set可以查看所有变量,可以配合grep过滤查询

---------------------------------------------------------------------------------

四:变量的扩展

1,引号与反撇号

""  双引号  界定范围 

touch "a b"  //可以创建a空格b的文件

a=10

echo  "$a"  //可以调用变量

''   单引号  界定范围  屏蔽特殊符号的功能

touch  'a b'  //也可以创建a空格b的文件

echo  '$a'  //无法调用变量,$是调用变量的特殊符号,被单引号屏蔽

``   反撇号  可以获得命令的执行结果,使用$( )可以得到相同效果

a=date    //定义变量时如果使用命令则不会直接识别

a=`date`   //使用反撇号可以将命令的执行结果赋值给变量

a=$(date)  //效果同上

 

2:使用read指令,以交互式使用脚本

改良版:

#!/bin/bash

read  -p  "请输入用户名"  u

useradd $u

stty -echo   //屏蔽回显

read  -p  "请输入密码"  p

stty echo    //恢复回显

echo $p | passwd --stdin $u

 

3,使用export命令发布全局变量

局部变量 ,仅当前解释器进程中可以使用的变量

全局变量,解释器进程产生的子进程也可以使用的变量

a=10  //在父进程创建变量,子进程无法使用,默认情况下是

局部变量

export  a  //将已有的变量发布为全局效果,进入子进程后可以调

用该变量

export  b=20  //发布一个新变量为全局效果

export  -n  a  //取消变量的全局效果,恢复为局部变量

注意,测试时要在父进程创建变量,然后可以执行bash进入

子进程测试效果,如果要返回父进程要执行exit指令

-------------------------------------------------------------------

五,shell中的运算

加、减、乘、除、求模(取余数)

expr  可以运算并输出结果

1expr   可以运算并输出结果

expr 1 + 1   //加法,注意,运算符号两边要有空格

expr 2 - 1    //减法

expr 2 * 2     //乘法,使用转义符号可以屏蔽之后一个字符的特殊含义

expr 4 / 2    //除法

expr 10 % 3   //10除以3取余数

[root@svr7 opt]# a=10

[root@svr7 opt]# b=20

[root@svr7 opt]# expr $a + $b    //也支持变量的运算

30

[root@svr7 opt]# expr $a + 100

------------------------------------------------------------------------------------------------------------

练习题:

1,如何执行Shell脚本?

2 自定义Shell变量时,有哪些注意事项?

3 编写一个Shell脚本程序,用来报告当前用户的环境信息。

4 简述预定义变量$$$?$#$*的作用。

5 编写一个Shell脚本程序,能够部署ftp服务,并开启ftp默认共享的目录权限。

6 简述单引号、双引号、反撇号在变量赋值操作中的特点。

------------------------------------------------------------------------------------------------------------------------

原文地址:https://www.cnblogs.com/ahaocloud/p/14374612.html