Linux Shell编程及自动化运维实现第一章 变量
前言
1、SHELL是一个应用程序,同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
2、shell多种执行方式
# bash test.sh=#sh test.sh //都子shell
#.test.sh=# source test.sh //是本shell
3、变量
3.1 简介:shell 变量—用一个固定的字符串去表示不固定的内容,便于修改。
3.2 变量的类型
1、自定义变量(示例:ping01.sh引入变量)
定义变量 | 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115 |
作用范围 | 仅在当前shell中有效 |
引用变量 | $变量名 或 ${变量名} |
查看变量 | echo $变量名; "set"可以查看所有变量(包括自定义变量和环境变量) |
取消变量 | unset 变量名 |
2、变量赋值(定义变量)
显式赋值
变量名=变量值
示例:
ip1=192.168.1.251
school="BeiJing 1000phone"
today1=`date +%F`
today2=$(date +%F)
变量赋值(定义变量)——read 从键盘读入变量值
例1
read 从键盘读入变量值
read 变量名
read -p "提示信息: " 变量名
read -t 5 -p "提示信息: " 变量名 //-t 等待5秒,后超时
read -n 2 变量名 //-n 只记录几个字符
例2
read -p "请输入您测试的IP地址:" ip
ping -c1 $ip &>/dev/null && echo " $ip up" || echo "$ip down"
~
注意事项:3种引号
echo "${school} is good" //脱去空格 " " 弱引用
echo '${school} is good' //脱去所有字符 ' ' 强引用
` ` 优先执行
3、环境变量
定义环境变量: 方法一 export back_dir2=/home/backup
方法二 export back_dir1 将自定义变量转换成环境变量
引用环境变量: $变量名 或 ${变量名}
查看环境变量: echo $变量名 env 例如env |grep back_dir2
取消环境变量: unset 变量名
变量作用范围: 在当前shell和子shell有效 !!!
使变量开机、登陆生效,将变量放到~/.bash_profile
4、位置变量和预定义变量(了解)
语法:命令 参数1 参数2 参数3 ....9以后特殊定义
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ...
预先定义过的变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值 0表示成功
示例1:
# vim test.sh
#!/usr/bin/bash
echo "第2个位置参数是$2"
echo "第1个位置参数是$1"
echo "第4个位置参数是$4"
echo "所有参数是: $*"
echo "所有参数是: $@"
echo "参数的个数是: $#"
echo "当前进程的PID是: $$"
echo '$1='$1
echo '$2='$2
echo '$3='$3
echo '$*='$*
echo '$@='$@
echo '$#='$#
echo '$$='$$
变量的运算——整数运算
方法一:expr
expr 1 + 2
expr $num1 + $num2 + - \* / % //*是任意字符,使用\ 转义一下。
+加
-减
\*乘
/除
%取余
方法二:$(())
echo $(($num1+$num2)) + - * / %
echo $((num1+num2))
echo $((5-3*2))
echo $(((5-3)*2))
echo $((2**3)) //(蜜)2的3次方
sum=$((1+2)); echo $sum
方法三:$[ ]
echo $[5+2] + - * / %
echo $[5**2]
方法四:let
let sum=2+3; echo $sum
let i++; echo $i