shell脚本学习记录
来源:互联网 发布:淘宝生活研究所在哪里 编辑:程序博客网 时间:2024/05/01 22:19
Linux/unix上常见的shell脚本解释器有bash,sh,csh,ksh,习惯上称他们为一种shell。
Bash是linux标准默认的shell。
Sh是unix标准默认的shell。
Ash三系统资源占用最少的shell。
csh比较大,功能也比较强大。
Ksh和商业发行版完美兼容。
脚本文件的扩展名并不影响脚本的执行,见名知意即可。
#!是一个约定标记,它告诉系统应该用什么解释器执行,使用那一种shell。#!/bin/bash
执行脚本的时候,使用./test.sh来执行。如果没有./,linux系统会去PATH变量中找,加了./就是在当前路径。
定义变量的时候注意变量和等号之间不能有空格。首个字符必须为字母,中间不能有空格,可以有下划线。定义的时候前面不用加美元符号。使用的时候,加上美元符号即可。变量名外面可以加上大括号,大括号主要是为了帮助解释器识别变量的边界。
重新定义只要当作没有定义过就行了。
定义只读变量,只要在定义好变量后,另起一行,readonlyvar就可以了。
删除变量,unsetvar
$0
当前脚本的文件名
$n
传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$#
传递给脚本或函数的参数个数。
$*
传递给脚本或函数的所有参数。
$@
传递给脚本或函数的所有参数。被双引号("")包含时,与$*稍有不同,下面将会讲到。
$?
上个命令的退出状态,或函数的返回值。
$$
当前Shell进程ID。对于Shell脚本,就是这些脚本所在的进程ID。
echo-e “Value of a is $a \n”这句话中,在引号中使用变量,shell会对其进行替换,就是在表达式中如果有特殊字符,shell会对其进行替换。还有一个就是转义字符,\n这里是换行的意思,前面的-e就是说,对转义字符也进行替换,如果不使用-e,就会输出\n。
转义字符
含义
\\
反斜杠
\a
警报,响铃
\b
退格(删除键)
\f
换页(FF),将当前位置移到下页开头
\n
换行
\r
回车
\t
水平制表符(tab键)
\v
垂直制表符
``反引号,在esc键的下方。
命令替换,`command`先执行命令,把结果存起来,在适当的地方输出。
DATE=`date`这样,即使在后面输出DATE,也是在执行这条语句的时间。
变量替换
形式
说明
${var}
变量本来的值
${var:-word}
如果变量 var为空或已被删除(unset),那么返回 word,但不改变 var的值。
${var:=word}
如果变量 var为空或已被删除(unset),那么返回word,并将var的值设置为word。
${var:?message}
如果变量 var为空或已被删除(unset),那么将消息message送到标准错误输出,可以用来检测变量var是否可以被正常赋值。
若此替换出现在Shell脚本中,那么脚本将停止运行。
${var:+word}
如果变量 var被定义,那么返回word,但不改变var的值。
bash不支持简单的数学计算,但是可以通过其他的命令来实现。expr,awk等,其中expr是最常用
val=`expr2 + 2`
注意,赋值不能有空格,但是计算表达式必须有空格,2+ 2就不能写成2+2.
-* / % ==!=,其中要注意的是,*必须加反斜杠\,也就是说2 \* 2才可以。
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
-eq-ne -gt -lt -ge -le
布尔运算 -o或运算-a与运算!非运算
字符串运算。
=
检测两个字符串是否相等,相等返回 true。
[$a = $b ]返回 false。
!=
检测两个字符串是否相等,不相等返回 true。
[$a != $b ]返回 true。
-z
检测字符串长度是否为0,为0返回true。
[-z $a ]返回 false。
-n
检测字符串长度是否为0,不为0返回true。
[-z $a ]返回 true。
str
检测字符串是否为空,不为空返回 true。
[$a ]返回 true。
文件测试运算符
操作符
说明
举例
-bfile
检测文件是否是块设备文件,如果是,则返回true。
[-b $file ]返回 false。
-cfile
检测文件是否是字符设备文件,如果是,则返回true。
[-b $file ]返回 false。
-dfile
检测文件是否是目录,如果是,则返回 true。
[-d $file ]返回 false。
-ffile
检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true。
[-f $file ]返回 true。
-gfile
检测文件是否设置了 SGID位,如果是,则返回true。
[-g $file ]返回 false。
-kfile
检测文件是否设置了粘着位(StickyBit),如果是,则返回true。
[-k $file ]返回 false。
-pfile
检测文件是否是具名管道,如果是,则返回 true。
[-p $file ]返回 false。
-ufile
检测文件是否设置了 SUID位,如果是,则返回true。
[-u $file ]返回 false。
-rfile
检测文件是否可读,如果是,则返回 true。
[-r $file ]返回 true。
-wfile
检测文件是否可写,如果是,则返回 true。
[-w $file ]返回 true。
-xfile
检测文件是否可执行,如果是,则返回 true。
[-x $file ]返回 true。
-sfile
检测文件是否为空(文件大小是否大于0),不为空返回true。
[-s $file ]返回 true。
-efile
检测文件(包括目录)是否存在,如果是,则返回true。
[-e $file ]返回 true。
Sh中没有多行注释。
shell中定义字符串可以用单引号也可以双引号,甚至可以不用引号。
单引号中的任何字符都会原样输出,变量无效。但是转义符可以。比如\n
单引号中不能出现单引号,转义也不可以。
定义数组arry=(v1v2)
或者array[0]=v1
使用一般是var=${array[0]}
${array[*]}${array[@]}这两个可以获得数组中所有的元素。
获得数组中元素的个数length=${#array[@]}或者length=${#array[*]}
获得单个元素的长度length=${#array[n]}
echo命令,在屏幕上打印指定的字符串。Echo“OK!\c” echo “it is a test”这样不会换行。
Echo“it is a test ” >myfile可以把结果重定向到文件中。这样会覆盖原来的文件里的内容,如果不想覆盖,可以通过>>来重定向。
echo命令中,双引号可有可无,单引号主要是为了原样输出。
选择语句。
If[ expression ]
then
fi
其中注意expression和【】之间有空格。
还有
If[ expression ]
then
else
fi
和
If[ expression ]
then
elif
then
else
fi
- shell脚本学习记录
- 《Linux Shell 脚本攻略》学习记录之一
- Shell 脚本学习记录(一)
- 工作记录--shell脚本
- Shell脚本记录
- shell脚本记录
- shell脚本记录
- Linux Shell 脚本学习,read、if、test、until记录
- 《Linux Shell 脚本攻略》学习记录之二
- 《Linux Shell 脚本攻略》学习记录之三
- 《Linux Shell 脚本攻略》学习记录之四
- shell脚本的学习记录(不定时更新)
- Shell脚本启动WebLogic记录
- 实用shell脚本命令记录
- 【脚本学习】区分shell与shell脚本
- Shell脚本学习
- Shell脚本 学习
- shell脚本的学习
- Cocos2d-x3.2 33种场景切换
- 【张孝祥并发课程笔记】03:传统线程同步通信技术
- The day of beginning
- 物联12:天线场概念
- java dom4j 解析xml 多节点
- shell脚本学习记录
- sip头字段解释
- 安卓之装饰者模式
- 链表逆序
- 全是干货!移动HTML 5前端性能优化指南
- Lucene学习笔记一
- to_char函数用法
- 机器学习领悟!
- JS 循环结构研究