变量
变量的三大组成部分
1.变量名:用来访问到变量值
2.赋值符号:将变量值的内存地址绑定给变量名
3.变量值:即我们存的数据
命名规范
命名风格
先定义,后使用
语法:变量名=值
注意:等号左右不能有空格
变量值的来源
直接赋值
1. 显式赋值:变量名=变量值
示例:
ip1=192.168.11.200
school="Shanghai oldboy"
today1=`date +%F`
today2=$(date +%F)
# 2、应用示例
[root@localhost ~]# url="www.baidu.com"
[root@localhost ~]# echo $url
www.baidu.com
[root@localhost ~]# url="www.sina.com.cn"
[root@localhost ~]# echo $url
www.sina.com.cn
从位置参数获取变量值
从调用脚本时传入的位置参数获取变量值:./b.sh a1 a2 a3
需要用到$n获取第n个位置参数值,超过10需要用${n},如下
$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
# 示例
[root@egon ~]# cat b.sh
#!/usr/bin/env bash
echo ${0}
echo $1
echo $2
echo $3
echo $4
echo $5
echo $6
echo $7
echo $8
echo $9
echo ${10}
echo ${11}
echo ${12}
# 运行
[root@egon ~]# chmod +x b.sh
[root@egon ~]# ./b.sh a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15
./b.sh
a1
a2
a3
a4
a5
a6
a7
a8
a9
a10
a11
a12
# 企业使用:可以实现脚本的不同功能(服务程序管理脚本-启动功能 关闭功能 重启功能)
server.sh start|stop|restart
与用户交互获取值
何为交互,即输入、输出
# 一:read接收用户的输入,即从键盘读入变量值
read 变量名
read -p "提示信息: " 变量名
read -t 5 -p "提示信息: " 变量名 # -t指定秒数
read -n 2 变量名 # -n读取的字符个数
=======》应用示例:vim first.sh
back_dir1=/var/backup
read -p "请输入你的备份目录: " back_dir2
echo $back_dir1
echo $back_dir2
企业使用:可以根据需求调整变量值,可以便于新员工快速掌握企业脚本使用
# 二:输出
# 2.1 echo命令,详解情况:https://www.cnblogs.com/linhaifeng/articles/13976349.html
[root@egon ~~]# name="egon"
[root@egon ~~]# age=18
[root@egon ~~]# echo -e "my name is\t$name\nmy age is\t$age"
my name is egon
my age is 19
还可以输出带颜色(了解即可)
# echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"
# 例如
# echo -e "\033[47;30m I love Egon! \033[0m",其中47的位置代表背景色, 30的位置是代表字体颜色
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[34m 黄色字 \033[0m"
echo -e "\033[41;33m 红底黄字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
# 需要使用参数-e,man echo 可以知道-e:enable interpretation of backslash escapes。
# 2.2 prinf命令(C语言风格)
%s
%d
%7.3f 打印浮点数,总宽度为7,小数位保留3位,并且四舍五入
[root@egon ~~]# name="egon"
[root@egon ~~]# age=18
[root@egon ~~]# printf "my name is %s my age is %s\n" $name $age
my name is egon my age is 18
[root@egon ~]# salary=3.3339
[root@egon ~]# printf "my name is %s my age is %7.3f\n" $name $salary
my name is egon my age is 3.334
删除变量
unset 变量名
预定变量
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID # 此外,可以使用只读变量来获取父进程的PID:$PPID、获取执行脚本的用户ID:$UID
$? 上一个命令的返回值 0表示成功
示例1:
[root@egon ~]# chmod +x b.sh
[root@egon ~]# ./b.sh a1 a2 a3 a4 a5
a1 a2 a3 a4 a5
a1 a2 a3 a4 a5
5
18988
1
[root@egon ~]# cat b.sh
#!/usr/bin/env bash
echo $*
echo $@
echo $#
echo $$
ping -c1 192.168.11.10 &>/dev/null
echo $?
示例2:
[root@egon ~]# vim ping.sh
#!/bin/bash
ping -c2 $1 &>/dev/null
if [ $? = 0 ];then
echo "host $1 is ok"
else
echo "host $1 is fail"
fi
[root@egon ~]# chmod +x ping.sh
[root@egon ~]# ./ping.sh 192.168.11.10