一·、变量名称规范性
- 变量名称中通常包含大小写字母,数字,下划线(不是必须)
- 不是变量名中同时需要具备字母、数字、下划线,变量名只能出现这三种字符
- 变量名不能以数字开头,只能以字母或者下划线开头
变量名格式定义
WESTOS_LINUX
Westos_Linux
westoS_Linux
例:
a=1
2d=1 #错误
_s=2
二、字符转义及变量声明
\ 转义单个字符
''强引用,批量转''中出现的字符
""弱引用,批量转译""中出现的字符
“”与‘’两者的区别
""不能转义 '!感叹号“,”`反向单引号“ ,”\反斜杠“,”$“
''可以转义元字符 * # ? ! `` ,这些字符都有自身的含义,需要转义
例:
三、${}变量声明(系统中存在的变量)
例:
【1】
echo $ab #默认会寻找ab这个整体的变量的值
echo ${a}b #a是变量
【2】
a=`date`
echo $a
a=$(date)
echo $a
【3】
a=(1 2 3)定义一个数组
echo $a不可以
echo ${a[0]}输出数组的第一个元素
echo ${a[1]}输出数组的第二个元素
echo ${a[*]}输出数组的所有元素
四、修改命令行提示符环境变量
echo PS1 #输出当前提示符环境变量
下面是PS1变量中各特殊符号的含义:
\d 显示系统日期,格式:星期 日期
例:PS1="\d >" 结果:六 10月 24 >
\A 显示系统时间,格式:HH:MM
例:PS1="\A >" 结果:21:04 >
\t 显示系统时间,格式:HH:MM:SS (24小时制)
例:PS1="\t >" 结果:21:04:32 >
\T 显示系统时间,格式:HH:MM:SS (12小时制)
例:PS1="\T >" 结果:09:04:32 >
\h 显示主机名称(简称)
例:PS1="\h >" 结果:CentOS >
\H 显示主机名称(全称)
PS1="\[\u@\h \W]\$" \u用户 \h主机名 \W目录 \$输出$
五、for语句(循环)
执行脚本test.sh时连续输出
for NUM in {1…3}
do
done
vim text1.sh
for NAME in leo tom harry #变量取值范围
do #执行的动作
echo $NAME #输出变量
done #结束
sh text1.sh
sh -x text.sh
【2】
vim text2.sh
for NAME in `seq 1 5` #1到5连续
do
echo $NAME
done
sh text2.sh
sh -x text2.sh
六、变量值传递
$0 脚本本身
$1 脚本后的第一串字符串
$2 脚本后的第二串字符串
$3 脚本后的第三个字符串
$# 脚本后跟的字符串个数
$* 脚本后跟的所有字符串,模式为“ 1 2 3 ”
$@ 脚本后跟的所有字符串,模式为“ 1”“2”“3”
$$ 当前进程的pid
区别:
$@=“1” “2” “3” #分开执行
$*=“1 2 3” #识别为一串字符
测试:
【1】
vim /mnt/test.sh #建立脚本
【2】
vim test.sh
echo \$\$ is $$ #查看看当前进程pid
watch -n 1 date
sh test.sh #执行脚本
ctrl +z #打入后台
ps f #查看当前shell的pid
【3】
vim test1.sh
#!/bin/bash
for NAME in "$*" NAME变量个数任意,直接在命令框输入
do
echo $NAME #输出变量NAME
done
sh -x test1.sh #检查每步执行情况
【4】
vim test1.sh
#!/bin/bash
for NAME in "$@" #变量个数任意
do
echo $NAME
done
sh -x test1.sh