无锡做网站公司电话,苏宁易购电商网站建设需求分析,长春网站优化方案,浙江网缘电子商务有限公司Shell 语言是一种动态类型和弱类型语言, 因此,在Shell中无需显示地声明变量, 且变量的类型会根据不同的操作符而发生变化. 静态类型语言: 在程序编译期间就确定变量类型的语言, 如java, C等 动态类型语言: 在程序运行期间才确定变量类型的语言, 如PHP, Python等.
一 shell变量… Shell 语言是一种动态类型和弱类型语言, 因此,在Shell中无需显示地声明变量, 且变量的类型会根据不同的操作符而发生变化. 静态类型语言: 在程序编译期间就确定变量类型的语言, 如java, C等 动态类型语言: 在程序运行期间才确定变量类型的语言, 如PHP, Python等.
一 shell变量介绍
什么是变量 在一个脚本周期内,其值可以发生改变的量就是变量。
Linux Shell中的变量分为系统变量和用户自定义变量系统变量HOME、PWD、USER等等 比如 echo $HOME 等等显示当前shell中所有变量set
1.1 变量分类
用户自定义变量: 这种变量是最常见的变量由用户自由定义变量名和变量的值。环境变量: 这种变量中主要保存的是和系统操作环境相关的数据比如当前登录用户用户的家目录命令的提示符等。不是太好理解吧那么大家还记得在Windows中同一台电脑可以有多个用户登录而且每个用户都可以定义自己的桌面样式和分辨率这些其实就是Windows的操作环境可以当做是Windows的环境变量来理解。环境变量的变量名可以自由定义但是一般对系统起作用的环境变量的变量名是系统预先设定好的。位置参数变量脚本变量: 这种变量主要是用来向脚本当中传递参数或数据的变量名不能自定义变量作用是固定的。预定义变量: 是Bash中已经定义好的变量变量名不能自定义变量作用也是固定的
1.2 变量名命名
命名只能使用英文字母数字和下划线首个字符不能以数字开头。等号左右两侧不能有空格可以使用下划线“_”变量的值如果有空格需要使用单引号或双引号包括。如:“test“hello world!””。其中双引号括起来的内容“$”“(”和反引号都拥有特殊含义而单引号括起来的内容都是普通字符。不能使用标点符号不能使用bash里的关键字可用help命令查看保留关键字。环境变量建议大写便于区分如果需要增加变量的值那么可以进行变量值的叠加。不过变量需要用双引号包含$变量名或用${变量名}包含变量名。
[rootmysql-112 ~]# test111
[rootmysql-112 ~]# test$test222
[rootmysql-112 ~]# echo ${test}
111222
#叠加变量test变量值变成了111222
[rootmysql-112 ~]# aaa111
[rootmysql-112 ~]# aaa$test222
[rootmysql-112 ~]# echo ${aaa}
$test222
关于单双引号的问题双引号能够识别变量双引号能够实现转义类似于“\*” 单引号是不能识别变量只会原样输出单引号是不能转义的
二 shell变量的定义 2.1 用户自定义变量
基本语法
定义变量变量值撤销变量unset 变量声明静态变量readonly变量注意不能unset
2.2 环境变量
2.2.1 环境变量设置
export age18 #使用export声明的变量即是环境变量
2.2.2 环境变量查询和删除
env命令和set命令的区别set命令可以查看所有变量而env命令只能查看环境变量。 2.2.3 系统默认环境变量
env 命令查看
2.3 位置参数变量
位置参数变量作用$n为数字$0表示当前 Shell 脚本程序的名称$1-9代表第一到第九个参数,十以上的参数需要用大括号包含如{10}$*这个变量代表命令行中所有的参数$把所有的参数看成一个整体$这个变量也代表命令行中所有的参数不过$把每个参数区分对待$#这个变量代表命令行中所有参数的个数
$0代表脚本名字$1 是你给你写的shell脚本传的第一个参数$2 是你给你写的shell脚本传的第二个参数…$*会把接收的所有参数当成一个整体对待而$则会区分对待接收到的所有参数。举个例子:
vim 1.sh
#!/bin/bash
for i in $*
#定义for循环in后面有几个值for会循环多少次注意“$*”要用双引号括起来
#每次循环会把in后面的值赋予变量i
#Shell把$*中的所有参数看成是一个整体所以这个for循环只会循环一次doecho The parameters is: $i#打印变量$i的值done
x1
#定义变量x的值为1
for y in $
#同样in后面的有几个值for循环几次每次都把值赋予变量y
#可是Shel1中把“$”中的每个参数都看成是独立的所以“$”中有几个参数就会循环几次doecho The parameter$x is: $y#输出变量y的值x$(( $x 1 ))#然变量x每次循环都加1为了输出时看的更清楚done
echo 参数的个数 $#
echo 脚本名字 $0
echo 传给shell的第一个参数: $1
echo 传给shell的第二个参数: $2
测试 2.4 预定义变量
预定义变量作用$?最后一次执行的命令的返回状态。如果这个变量的值为0证明上一个命令正确执行;如果这个变量的值为非О(具体是哪个数由命令自己来决定则证明上一个命令执行不正确了。$$当前进程的进程号PID)$!后台运行的最后一个进程的进程号(PID)
vi 2.sh
#!/bin/bash
echo The current process is $$
echo $?
#输出当前进程的PID.
#这个PID就是2.sh这个脚本执行时生成的进程的PID
find /root -name 2.sh
#使用find命令在root目录下查找hello.sh文件
#符号的意思是把命令放入后台执行工作管理我们在系统管理章节会详细介绍
echo The last one Daemon process is $!
#输出这个后台执行命令的进程的PID也就是输出find命令的PID号测试 三 只读变量
vi 3.sh
#!/bin/bash
a10
#语法readonly 变量名
echo ${a}
readonly a
a20 #会报错readonly variable
echo $a 四 接受键盘输入
[rootlocalhost ~]$ read [选项][变量名]
选项:-a 后跟一个变量该变量会被认为是个数组然后给其赋值默认是以空格为分割符。-p “提示信息”在等待read输入时输出提示信息-t 秒数read命令会一直等待用户输入使用此选项可以指定等待时间-n 数字read命令只接受指定的字符数就会执行-s 隐藏输入的数据适用于机密信息的输入-d 后面跟一个标志符其实只有其后的第一个字符有用作为结束的标志。-e 在输入的时候可以使用命令补全功能。
变量名:
变量名可以自定义如果不指定变量名会把输入保存入默认变量REPLY.
如果只提供了一个变量名则整个输入行赋予该变量.
如果提供了一个以上的变量名则输入行分为若干字一个接一个地赋予各个变量而命令行上的最后一个变量取得剩余的所有字read命令
[rootlocalhost sh]$ vi read.sh
#!/bin/bashread -t 30 -p Please input your name: name
#提示“请输入姓名”并等待30 秒把用户的输入保存入变量name 中
echo Name is $name
#看看变量“$name”中是否保存了你的输入read -s -t 30 -p Please enter your age: age
#提示“请输入年龄”并等待30秒把用户的输入保存入变量age中
#年龄是隐私所以我们用“-s”选项隐藏输入
echo -e \n
#调整输出格式如果不输出换行一会的年龄输出不会换行
echo Age is $ageread -n 1 -t 30 -p Please select your gender[M/F]: gender
#提示“请选择性别”并等待30秒把用户的输入保存入变量gender
#使用“-n1”选项只接收一个输入字符就会执行都不用输入回车
echo -e \n
echo Sex is $gender五 shell特殊符号 符号作用’ ’单引号。在单引号中所有的特殊符号如“$”和”(反引号)都没有特殊含义。单引号括起来的都是普通字符会原样输出“ ”双引号。在双引号中特殊符号都没有特殊含义但是“$”“”esc键下面和“\”是例外拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。· ·反引号。反引号括起来的内容是系统命令在Bash中会先执行它。它和作用相同不过因为反引号非常容易看错。$()和反引号作用一样用来引用系统命令。(推荐使用)()用于一串命令执行时()中的命令会在子Shell中运行{}用于一串命令执行时{ }中的命令会在当前Shell中执行。也可以用于变量变形与替换。[ ]用于变量的测试。#在Shell脚本中#开头的行代表注释。$用于调用变量的值如需要调用变量name的值时需要用$name的方式得到变量的值。\转义符跟在\之后的特殊符号将失去特殊含义变为普通字符。如$将输出“$”符号而不当做是变量引用。