赞
踩
**
脚本语言是一种解释性的语言,例如Python、vbscript、javascript、installshield script、ActionScript等等,它不像c\c++等可以编译成二进制代码,以可执行文件的形式存在,脚本语言不需要编译,可以直接用,通常以文本(如ASCII)保存,只在被调用时进行解释或编译
shell中所有的类型都是字符串
在定义变量时通常不需要指明类型,直接赋值就可以,且变量名一般大写
VAR=value (如果value值中包含了空白符则必须使用引号括起来)
VAR=‘value’
VAR=“value”
注意,赋值号的周围不能有空格
a.直接用$符号引用一个已经定义过的变量
$VAR或者${VAR}
{}可以去掉的,但是还是推荐加上,为了帮助解释器识别变量边界
echo "do you want ${VAR}Script " 如果不加编译器会将VARScript当成一个变量,其值为空
b.已经定义过的变量也可以重新被赋值
可以使用readonly将变量定义成只读变量
rendonly VAR=value
c.单引号与双引号的区别
单引号:只会将单引号中的内容原样输出
双引号:会解析其中的命令(需要反引起来),变量,再输出
d.将命令结果赋值给变量
VAR=command
VAR=$(command)
e.删除变量
unset删除变量,但不能删除只读变量
unset VAR
**
1)局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
**
1.算术运算符
VAR=`expr $a + $b`
VAR=`expr $a - $b`
VAR=`expr $a \* $b`
VAR=`expr $a / $b`
VAR=`expr \`expr $a + $b\` \* \`expr $a - $b\``
2.关系运算符
只适用于字符串是数字的类型
-eq 等于则返回ture
-ne 不等于则返回ture
-gt 大于则返回ture
-lt 小于则返回ture
-ge 大于等于则返回ture
-le 小于等于则返回ture
3.布尔运算符
!
-a是或运算
-o是与运算
4.字符串运算符
5.文件测试运算符
先来复习一下, linux系统中文件类型
a.普通文件 -
b.目录文件 -d
c.块设备文件 b 就是存储数据以供系统存取的接口设备,简而言之就是硬盘
块设备一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,linux 内核中,块设备将数据存储与固定的大小的块中,每个块都有自己的固定地址,使用其他缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。
(1)当一个用户程序要向磁盘写入数据时,会发出write()系统调用给内核。
(2)内核会调用虚拟文件系统相应的函数,将需要写入***文件描述符和文件内容指针***传递给该函数。
(3)内核***需要确定写入磁盘的位置***,通过映射层知道需要写入磁盘的哪一块。
(4)根据磁盘的文件系统的类型,调用不同文件格式的写入函数,将数据发送给通用块层(比如ext2和ext3文件系统的写入函数是不同的,这些函数由内核开发者实现,驱动开发者不用实现这类函数)
(5)数据到达通用块层后,就对块设备发出写请求。内核利用通用块层的启动I/O调度器,对数据进行排序。
(6)同用块层下面是"I/O调度器"。调度器作用是把物理上相邻的读写合并在一起,这样可以加快访问速度。
(7)最后快设备驱动向磁盘发送指令和数据,将数据写入磁盘。
d.字符设备文件 c 串行端口的接口设备,如键盘鼠标等
e.套接字文件 s
f.管道文件 p
用于不同进程间通信,当两个进程需要数据传输时,就需要用到管道文件,一个进程将需要的数据写入管道的一端,另一个进程则从管道的另一端读取.
g.连接文件 i
6.字符串运算符
**
a.直接对数组全部定义
b.对数组成员进行定义
Arry=(4 6 we sre yui juhg) (中间用空格隔开)
Arry[0]=4
```.1.获取数组的长度 ${#Arry[*]}
2.数组所有的元素 ${Arry[*]} 或 ${ARR[@]}
3.遍历数组
for E in ${Arry[**]}
do
echo ${E}
done
4.数组作为参数传递给脚本
sh arr2.sh "{$arr[*]}"
**
**
(有三种形式)
注意:写条件判断式时要注意项之间的空格
**1.** if [ 条件判断式 ];then 程序 fi 或者: if [ 条件判断式 ] then 程序 fi **2.** if [ 条件判断式 ] then 程序1 else 程序2 fi **3.** if [ 条件判断式1 ] then 程序1 elif [ 条件判断式2 ] then 程序2 elif [ 条件判断式3 ] then 程序3 else 程序4 fi case ${WORD} in start) echo "starting" ;; stop) echo "stoping" ;; *) echo "[start|stop]..." esac
**
for N in 1 2 3 do echo ${N} done for N in {1..5} do echo ${N} done for ((i=1;i<=5;i++)) do echo ${i} done while ((i<=5)) do echo ${i} ((i++)) done
**
function fn { #fn为函数名字,在这里()可以省略,如果只写了函数名字而不写function时,那()则不能省略
echo ""
return 1 (0-127) # 这个返回值理解为是一个状态码 ,脚本不能 return 。 通过函数的返回结果表示脚本执行的结果,
# **可写可不写,写了可以通过echo $?来获取当前return值**
}
#函数调用
#若没有传递参数,则直接使用名字fn,若有传递参数则后面跟参数
**局部变量是在函数内部使用的变量,在变量声明前面冠以 local 关键字。如果脚本在函数外部有同名变量,那么 shell 将能区分开这两个变量
**{**复习一波有关变量的知识
shell中变量分成环境变量(全局变量)和普通变量(局部变量)
环境变量也称为全局变量,可以在创建他们的Shell及其派生出来的任意子进程Shell中使用,
环境变量又可以分为自定义环境变量和bash内置的环境变量,环境变量可以在命令行中设置和创建,用户退出命令行时这些变量值就会丢失,想要永久保存环境变量,可在用户家目录下的. bash_profile或. bashrc(非用户登录模式特有,如:SSH)文件中,或在/etc/profile文件中定义,这样每次用户登录时这些变量都将被初始化。
普通变量也可成为局部变量,只能在创建它们的Shell函数或Shell脚本中使用,普通变量一般由开发者在开发脚本程序时创建
}
函数名在变量 $0 中定义, 函数命令行的其他参数使用变量 $1,$2…,由于函数为自己的参数值使用专用的参数环境变量,所以函数无法从脚本命令行直接访问脚本参数值。如果想在函数中使用这些值,那么必须在调用该函数时手动传递这些数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。