学习笔记(9)——shellscript
2015-12-26 10:01
218 查看
注意事项:
(1)命令的执行是从上至下,从左到右地进行分析与执行的。
(2)命令的执行过程中,命令、参数间的多个空白都会被忽略掉。
(3)空白行同样被忽略掉,并且【tab】键所得的空白同样被市委空格键。
(4)如果读取到一个回车符号(Enter、CR),就尝试开始执行改行或该串命令。
(5)如果一行的内容太多了,可以使用“\【Enter】”来扩展至下一行。
(6)#号可作为批注。任何加在#号后面的内容都被作为批注文字被忽略。
ShellScript中的第一行通常为 #!/bin/bash 用来声明script使用的shell名称。一般我们使用的是bash的语法,所有使用上述声明。当该程序执行时,它可以自动加载bash的相关环境配置文件。除第一行声明外,其他的注释都只用#即可,不用加“!”。
在script的开始部分,务必将一些重要的环境变量设置好,至少设置PATH和LANG。
script的执行方式:source script、sh script和./script
source script:将本文件在父进程中执行,即在原本的bash中执行。(比如更改配置文件后一般用source这个命令使之生效)(注意“exit 0”的使用)
sh script:该脚本文件会在一个新的bash环境中执行,即子进程。当子进程结束后,子进程中的各项变量或操作将会结束,不会传回到父进程中。
./script:与sh类似,也是在一个新的bash中执行脚本,但与sh有所区别。
在使用sh时,可以使用调试功能:
sh -n:不执行脚本,仅仅查询语法问题。
sh -v:执行前将内容输出到屏幕上。
sh -x:逐条输出,类似debug。
默认变量:
在执行脚本时。脚本名称(带绝对路径)默认为变量:$0;执行时脚本名之后带的每个参数默认为变量:$1,$2,$3,……,$n。
“$@”表示“$1”、“$2”、“$3”、……、“$n”,每个变量都是独立的。注意是不包含$0。
“$#”表示参数的个数。
使用“shift n”命令来使默认变量偏移。n表示偏移的个数,如果缺省默认为1。所谓偏移是指:讲除$0外的变量向前移动,相当与删除前n个变量。
如:./test.sh para1 para2 para3 para4 para5 则$1=para1 $2=para2 $3=para3 $4=para4 $5=para5;如果在test.sh中使用了shift 2后,对应关系变为:$1=para3 $2=para4 $3=para5。
script的编写需要掌握bash中的相关命令以及正则表达式。
1.交互式脚本文件的产生一般利用read命令:read -p "输入提示" 变量名 需要用户按照提示进行输入,并将输入信息保存在变量中。配合正则表达式可严格控制用户的输入
2.输出信息可使用echo或echo -e来讲结果输出到屏幕上。如果使用sh的执行方式,-e会被输出。
3.判断式的使用:
(1)test命令,接合||(或)和&&(且)使用
(2)判断符号:"[ ]"。判断式中,该判断符号的两端要加空格。
注意:中括号中,每个组件都需要空格来分隔;变量和常量最好用双引号引起来;
文件类型:
-e:该文件名是否存在。如 test -e file
-f:该文件名是否存在且为文件。
-d:该文件名是否存在且为目录。
-r:该文件名是否存在且具有可读权限。
-w:该文件名是否存在且具有可写权限。
-x:该文件名是否存在且具有可执行权限。
-s:该文件名是否存在且为“非空白文件”。
整数类型:
-eq:两数值相等。
-ne:两数值不相等。
-gt:n1>n2
-lt:n1<n2
-ge:n1>=n2
-le:n1<=n2
字符串类型;
test -z string:判断字符串是否为空字符串。若是返回true。
test -n string:判断字符串是否为非空字符串。若是返回true。(与-z相反)
test string1=string2:判断两字符串是否相等,若相等,返回true。
test string1 !=string2:判断两字符串是否相等,若不相等,返回true。
多重判断条件:
-a :两个条件同时成立,返回true。(相当于&&)如 test -x file -a -r file 或 [ -x file -a -r file ] 或 [ -x file ] && [ -r file ]
-o :任何一个条件成立,返回true。(相当于||)
!:反向状态。(放在其它参数之前)如 test ! -x file
(3)条件判断式:
①if then格式:
if [条件判断式]; then
条件成立时执行的内容。
fi
②if elseif格式:
if [条件判断式1]; then
条件1成立时执行的内容。
elif [条件判断式2]; then
条件2成立时执行的内容。
else
条件1和条件2都不成立时执行的内容。
fi
③case...esac格式:
case 变量名 in
"变量内容1")
变量内容符合“变量内容1”时执行的内容。
;;
"变量内容2")
变量内容符合“变量内容2”时执行的内容。
;;
*)
变量内容不符合“变量内容1”和“变量内容2”时执行的内容。
;;
esac
4.函数(function)的使用
格式:
function fname(){
程序段
}
5.循环:
(1)while do done:当条件不成立时,停止循环
格式:
while [条件]
do
循环内容
done
(2)until do done:当条件成立时,停止循环
格式:
until [条件]
do
循环内容
done
(3)for do done
格式1:在循环内容中,var的值依次为:con1 con2 con3...(这部分可以是数组类型的变量,在循环时,依次取数组中的一个元素值)
for var in con1 con2 con3...
do
循环内容
done
格式2:数制处理(与C语言等类似)
for ((初始值;限制值;执行补偿))
do
循环内容
done
(1)命令的执行是从上至下,从左到右地进行分析与执行的。
(2)命令的执行过程中,命令、参数间的多个空白都会被忽略掉。
(3)空白行同样被忽略掉,并且【tab】键所得的空白同样被市委空格键。
(4)如果读取到一个回车符号(Enter、CR),就尝试开始执行改行或该串命令。
(5)如果一行的内容太多了,可以使用“\【Enter】”来扩展至下一行。
(6)#号可作为批注。任何加在#号后面的内容都被作为批注文字被忽略。
ShellScript中的第一行通常为 #!/bin/bash 用来声明script使用的shell名称。一般我们使用的是bash的语法,所有使用上述声明。当该程序执行时,它可以自动加载bash的相关环境配置文件。除第一行声明外,其他的注释都只用#即可,不用加“!”。
在script的开始部分,务必将一些重要的环境变量设置好,至少设置PATH和LANG。
script的执行方式:source script、sh script和./script
source script:将本文件在父进程中执行,即在原本的bash中执行。(比如更改配置文件后一般用source这个命令使之生效)(注意“exit 0”的使用)
sh script:该脚本文件会在一个新的bash环境中执行,即子进程。当子进程结束后,子进程中的各项变量或操作将会结束,不会传回到父进程中。
./script:与sh类似,也是在一个新的bash中执行脚本,但与sh有所区别。
在使用sh时,可以使用调试功能:
sh -n:不执行脚本,仅仅查询语法问题。
sh -v:执行前将内容输出到屏幕上。
sh -x:逐条输出,类似debug。
默认变量:
在执行脚本时。脚本名称(带绝对路径)默认为变量:$0;执行时脚本名之后带的每个参数默认为变量:$1,$2,$3,……,$n。
“$@”表示“$1”、“$2”、“$3”、……、“$n”,每个变量都是独立的。注意是不包含$0。
“$#”表示参数的个数。
使用“shift n”命令来使默认变量偏移。n表示偏移的个数,如果缺省默认为1。所谓偏移是指:讲除$0外的变量向前移动,相当与删除前n个变量。
如:./test.sh para1 para2 para3 para4 para5 则$1=para1 $2=para2 $3=para3 $4=para4 $5=para5;如果在test.sh中使用了shift 2后,对应关系变为:$1=para3 $2=para4 $3=para5。
script的编写需要掌握bash中的相关命令以及正则表达式。
1.交互式脚本文件的产生一般利用read命令:read -p "输入提示" 变量名 需要用户按照提示进行输入,并将输入信息保存在变量中。配合正则表达式可严格控制用户的输入
2.输出信息可使用echo或echo -e来讲结果输出到屏幕上。如果使用sh的执行方式,-e会被输出。
3.判断式的使用:
(1)test命令,接合||(或)和&&(且)使用
(2)判断符号:"[ ]"。判断式中,该判断符号的两端要加空格。
注意:中括号中,每个组件都需要空格来分隔;变量和常量最好用双引号引起来;
文件类型:
-e:该文件名是否存在。如 test -e file
-f:该文件名是否存在且为文件。
-d:该文件名是否存在且为目录。
-r:该文件名是否存在且具有可读权限。
-w:该文件名是否存在且具有可写权限。
-x:该文件名是否存在且具有可执行权限。
-s:该文件名是否存在且为“非空白文件”。
整数类型:
-eq:两数值相等。
-ne:两数值不相等。
-gt:n1>n2
-lt:n1<n2
-ge:n1>=n2
-le:n1<=n2
字符串类型;
test -z string:判断字符串是否为空字符串。若是返回true。
test -n string:判断字符串是否为非空字符串。若是返回true。(与-z相反)
test string1=string2:判断两字符串是否相等,若相等,返回true。
test string1 !=string2:判断两字符串是否相等,若不相等,返回true。
多重判断条件:
-a :两个条件同时成立,返回true。(相当于&&)如 test -x file -a -r file 或 [ -x file -a -r file ] 或 [ -x file ] && [ -r file ]
-o :任何一个条件成立,返回true。(相当于||)
!:反向状态。(放在其它参数之前)如 test ! -x file
(3)条件判断式:
①if then格式:
if [条件判断式]; then
条件成立时执行的内容。
fi
②if elseif格式:
if [条件判断式1]; then
条件1成立时执行的内容。
elif [条件判断式2]; then
条件2成立时执行的内容。
else
条件1和条件2都不成立时执行的内容。
fi
③case...esac格式:
case 变量名 in
"变量内容1")
变量内容符合“变量内容1”时执行的内容。
;;
"变量内容2")
变量内容符合“变量内容2”时执行的内容。
;;
*)
变量内容不符合“变量内容1”和“变量内容2”时执行的内容。
;;
esac
4.函数(function)的使用
格式:
function fname(){
程序段
}
5.循环:
(1)while do done:当条件不成立时,停止循环
格式:
while [条件]
do
循环内容
done
(2)until do done:当条件成立时,停止循环
格式:
until [条件]
do
循环内容
done
(3)for do done
格式1:在循环内容中,var的值依次为:con1 con2 con3...(这部分可以是数组类型的变量,在循环时,依次取数组中的一个元素值)
for var in con1 con2 con3...
do
循环内容
done
格式2:数制处理(与C语言等类似)
for ((初始值;限制值;执行补偿))
do
循环内容
done
相关文章推荐
- .bash_profile和.bashrc的区别(如何设置生效)
- 本地shell执行远程命令
- Linux Shell 脚本基础
- android shell 常用的命令
- shell中对文本的一些处理
- Shell系列 - Mac OS X自动下载切换桌面壁纸
- 使用powershell/vbs自动化模拟鼠标点击操作
- A bash script for tool version test
- shell自动配置bond
- Jenkins执行远程Linux系统的shell命令
- shell截取字符串方法
- linux shell 笔记
- Linux Shell编程入门
- Shell脚本语法
- vbs下载者和powershell下载器
- tomcat maven shell 脚本省时省力
- Shell 执行Junit
- shell脚本在日常工作中的使用--辅助生成代码
- Git 客户端中文乱码
- 调用WScript.Shell时产生Automation 服务器不能创建对象的错误