怎么入侵网站后台东莞网站建设最牛
一.shell变量概述
变量是shell传递数据的一种方法,即用一个固定的字符串去表示不固定的值,便于后期引用
二.变量命名规范
命名要求:字母、数字、下划线组成,字母开头(不能数字开头)
变量名尽量具备一定含义,但不要和系统命令冲突;等号赋值,两边不能空格 例1: ip=192.168.1.100 #不要和已有的系统命令冲突 HostName_Ip=192.168.1.100 #推荐驼峰式命名
例1
HostName=$(hostname)echo $HostName
三.shell变量定义的方式
用户自定义变量:人为定义变量名称 系统环境变量:系统操作环境相关数据 位置参数变量:向脚本传递参数,名称固定,作用固定 预定义变量:bash定义好的变量,名称固定,作用固定
1、用户自定义变量,当前shell有效
(1) 变量名不能出现"-"横杠,变量值有空格需要引号括起来
var="hello world"
(2) 引用变量,$变量名 或 ${变量名}
echo $var echo $var_log #变量无法引用echo ${var}_log #变量可以引用
(3) 查看变量,set显示所有变量(自定义和环境变量)
set | grep var
(4) 取消变量,作用范围:当前shell
unset var
(5) 引用变量,"" 双引号属于弱引用,‘’单引号属于强引用
echo "$var hello china" #需要引用变量值echo '$var hello china' #只想引用变量名,不执行$特殊符号echo "$var hello china \$SHELL" #部分变量执行,部分变量不执行
(6) 变量命令赋值,使用或$() ***
不能嵌套{ ``` } $() 能嵌套 ${ ${ }}
Ip=`ifconfig ens33 | grep "inet" |grep -v inet6 |awk '{print $2}'`或Ip=$(ifconfig ens33 | grep "inet" |grep -v inet6 |awk '{print $2}')
2、系统环境变量
(1) 使用系统已定义好的变量
export echo "命令目录:$PATH" 永久将脚本加入到全局变量 PATH=${PATH}:/sh export PATH=${PATH}:/sh echo "export PATH=${PATH}:/sh" >> /etc/profile echo "宿主目录: $HOME" echo "当前目录: $PWD" echo "主机名: $HOSTNAME" echo "客户端地址和端口: $SSH_CONNECTION"
(2) 自定义环境变量
export var2 #把局部变量发布到全局,子shell也识别
var2="hello beijing" #定义局部变量,子shell不识别cat >> env1.sh << EOF#!/bin/bashecho $var2 EOFsh env1.sh
3、 预定义变量
vim variable.sh
#!/bin/bash echo
"当前shell脚本的文件名:$0"
echo "第1个shell脚本位置参数:$1"
echo "第2个shell脚本位置参数:$2"
echo "第3个shell脚本位置参数:$3"
echo "第10个shell脚本位置参数:${10}"
echo "所有传递的位置参数:$"
echo "所有传递的位置参数:$@"
echo "总共传递的参数数量:$#"
echo "当前程序运行的PID:$$"
echo "上一个命令执行的返回结果:$?"
例:
$* 和 $@ 的区别: **不加引号两者结果相同;加引号,$*把参数作为整体,$@把参数作为分散个体。
vim variable2.sh
#!/bin/bash
test() {echo "未加引号,两者相同"echo $*echo $@echo "添加引号,两者对比"echo "----"\$*----""for I in "$*"doecho $Idoneecho "----"\$@----""for I in "$@"doecho $Idone
}
test 11 22 33 44sh variable2.sh
4、 位置变量是预定义变量的一部分,是定义脚本后的参数位置的
$1 $2 $3 . . $9 ${10}
5补充:将命令执行结果传给变量(命令替换)
例1:打印今年和明年的时间
echo "今年是 $(date +%Y) 年"echo "明年是 $(($(date +%Y)+1)) 年"
例2:命令的嵌套使用
Back=$(tar zcf /backup/root.tar.gz $(find /root/ -nam