变量类型:
数据存储格式,储存空间大小,参与变量种类
字符型
数值型:
整数型
浮点型
强类型的:定义变量时必须指定变量类型,参与运算必须符合类型要求。
弱类型的:定义变凉时无需指定类型,所有的全是字符型,参与运算会自动进行隐式类型转换。变量无需定义,可直接使用...
bash中的变量种类:
根据变量的生效范围等标准
本地变量:生效范围为当前shell的生命周期,对当前shell其他之外的shell和当前shell的子shell都不生效,重启也失效。
环境变量:生效范围为,当前shell进程和其子shell都生效。
局部变量:生效范围为当前shell的某代码片段(通常指定函数)
位置变量:类似于grep中 前面I() 后面使用 \1, \2...这样的表达式,$1 $2 .....来表示 用于让脚本在脚本代码中调用通过命令传递给他的参数...
特殊变量:$? $0 其中$0在脚本中使用的话 为输出脚本名称
本地变量:
变量赋值: name=“vlove”
可以使用引号
1)可以直接给与字符串 name=usermane,如果有空格加双引号
2)也可是使用变量的值: name=$name 也可以使用双引号
3)可以直接使用命令的值:name=$(COMMAND)
第三个引用了命令执行的结果.... 必须使用小括号 或者使用反引号
name=·(command)·
变量引用 $name $(name)
强引用:单引号 ‘ ’ 所见如所得,输出字符串,如果字符串中有变量,也不会输出变量的值
弱引用:双引号,“” 如果双引号里面的变量,会先输出变量的值。。。
查看系统定义的所有变量:set
取消定义的变量 unset “name”
环境变量:
变量声明,赋值
就是比本地变量的时候多了一个声明
声明可以使用 export,declare
export name=username 或者 declare -x name=username
引用变量和本地变量是一样的
查看环境变量 export
env
printenv 也可以把本地变量追加为环境变量 export Uname
销毁变量 也是 unset name
bash有许多内建的环境变量
PATH SHELL UID HOME 等等
变量命名法则:
1、不能使用程序中的保留字,如:if for等
2、只能使用大小写字谜,下划线数字,但是不能使用数字开头
3、见名知意 ,有些编程人员的坏习惯,随便复制随便起名,现在知道可能明天就不知道了,所以起名要有特殊含义!
变量引用: $name , $(name)
" "弱引用 强引用‘ ’ 和上面类似
位置变量《》
在脚本代码中请用通过命令行传递给脚本的参数。。
$1 $2.......对应调用第1,第2.....等参数。
shift[n] 删除参数。。。br/>也有一些特殊的参数
$*:传递给脚本的所有参数
[email protected]:传递给脚本的所有参数
$#:传递给脚本的参数的个数
实例:判断给出的文件的行数
#!/bin/bash
linecount="$(wc -l $1| cut -d‘ ‘ -f1)
echo "$1 hai $linecount lines"
bash的配置文件
全局配置:对所有shell user都生效的
/etc/profile
/etc/profile.d/*.sh结尾的所有文件
/etc/bashrc
个人配置:只对当前用户生效
~/.bashrc
~/.bash_profile
按照功能划分 也是两类
profile类别 为交互式登录的shell提供配置
全局 /etc/paofile 、 /etc/profile.d/*.sh
个人: ~/.bash_profile
功用:
(1),用于定义环境变量
(2)、运行命令或者脚本
bashrc类:为非交互式登录的shell提供配置
全局:/etc/bashrc
个人:~/.bashrc
功能使用:
(1)、定义命令别名
(2)、定义本地变量
交互式登录:直接通过终端输入账号密码登录
:使用su - username这样切换的用户
非交互式登录:su Username切换的
:图形界面下打开的终端(都是伪终端)
:执行脚本
后期编译安装mysql或者是apache的时候需要把他们的环境变量定义到系统的环境变量中,要不总得去他们自己的绝对路径中调用
这就需要修改/etc/profile配置文件 或者是其.d下面的配置文件
如:PATH=$PATH:/usr/local/mysql/bin
export PATH
修改完成后直接保存
但是必须要重新交互式登录shell 才能生效
当然也可是使用 . /etc/profile.d/*.sh来生效
也可以使用 source 绝对路径来生效 但是source会有一个副作用,就是source一次就会多一次路径
算数运算表达式(也是赋值后变量的引用)
num1=1
num2=2
算他们的合 则是
var= $[$num1+num2]var=$(($num1+num2))
在一个数值范围内随机取出数字,(好像有的面试题中有)
这个就用到了bash中的内建变量
随机数生成器$RANDOM
在80以内随机取值 例如:
echo $[$RANDOM%80+1]后面的+1 是因为前面的80 只到79
其实也是算数运算表达式
增强型赋值(符号)
+=,-=,*=,/=,%=
let 变量 符号
条件测试:
判断某需求是否满足,需要由测试机制来实现:
专用的测试命令表达式需要由测试命令辅助完成测试过程:
测试命令:
text EXPRESSION
[ EXPRESSION ]
[[ EXPROSSION ]]
中括号之间前后必须要有空格
数值测试:
gt大于
ge大于等于
eq 是否等于
ne 是否不等于
lt 小于
le是否小于等于
字符串测试:(在使用for循环的时候会用到,判断字符串是否为空等)
==:是否等于
>:是否大于
<:是否小于
-z:是否为空,空为真
-n:测试字符串是否不空,不空则为真
!=:是否不等于
=~:左侧字符串是否能被右侧的PATHERN所匹配
此表达式一般要使用[[ ]] 双中括号
以上判断了变量name的第一个字母是否为f
***用于字符串比较的其中的操作数都要使用引号
练习:写一个脚本
接受一个文件路径作为参数
如果参数个数小于1,则提示用户至少给一个参数。。。
如果岑姝个数不小于1,则显示第一参数所指向的文件中的空白行的行数
bash的基础特性 数值运算 数值大小比较 环境变量 位置变量 正则表达式
原文地址:http://blog.51cto.com/12529218/2285207