脚本编程语言与编译型语言:
SHELL脚本的基本语法格式:
脚本必须以#!开头:(# cat /etc/shells)
例如#!/bin/bash(解释器)
然后赋予脚本具有执行权限,# chmod +x scripts.sh
脚本的测试工具bash:
-x:检查脚本在执行中的详细过程(排错时,经常会用到)
exit:退出脚本(其数值为0-255)
SHELL脚本的逻辑关系总结:
条件判断语句总结:
单分支if语句双分支if语句 多分支if语句case选择语句
if 判断条件 ;then if 判断条件;then if 判断条件;thencase $1 in
statement statement statement string)
...... ........ ......... statement;;
fi else elif 判断条件;then string2)
statement statement statement;;
..... ......... ......)
fi elif 判断条件;then statement;;
statement esac
.........
else
statement
fi
范例:
POSIX的结束状态总结:
替换运算符总结(变量的赋值):
${varname:-word}
如果varname存在且非null,则返回其值;否则,返回word;
用途:如果变量未定义,则返回默认值
范例:如果count未定义,则${count:-0}的值为0
${varname:=word}
如果varname存在且非null,则返回其值;否则,将varname设置为word,并返回其值;
用途:如果变量未定义,则设置变量为默认值
范烈:如果count未定义,则${count:=0}的值为0
${varname:+word}
如果varname存在且非null,则返回word;否则,返回null;
用途:为测试变量的存在
范例:如果count已定义,则${count:+1}的值为1
${varname:?message}
用途:为了捕捉由于变量未定义所导致的错误。
范例:如果count未定义,${count:?"undefined!"}则显示count:undefined!
模式匹配运算符总结:
假设path变量的值为:/etc/sysconfig/network-scripts/ifcfg-eth0.text.bak
${variable#pattern}:
如果模式匹配于变量值的开头处,则删除匹配的最短部分,并返回剩下的部分;
范例:echo ${path#/*/}的值为etc/sysconfig/network-scripts/ifcfg-eth0.text.bak
${variable##pattern}
如果模式匹配于变量值的开头处,则删除匹配的最长部分,并返回剩下的部分;
范例:echo ${path##/*/}的值为ifcfg-eth0.text.bake
${variable%pattern}
如果模式匹配于变量的结尾处,则删除匹配的最短部分,并返回剩下的部分;
范例:echo ${path%.*}的值为/etc/sysconfig/network-scripts/ifcfg-eth0.text
${variable%%pattern}
如果模式匹配于变量的结尾处,则删除匹配的最长部分,则返回剩余部分。
范例:echo ${path%%.*}的值为/etc/sysconfig/network-scripts/ifcfg-eth0
${#variable}
显示variable变量值的字符长度
Shell脚本常用的循环语句总结:
for循环 while循环 until循环
for 变量 in 列表 ;do while condition(条件);do until condition ;do
command... statements statements
done done done
while循环:只要condition满足条件,while会循环
until循环:只要condition不满足条件,until会循环
test命令
test命令可以处理shell脚本中的各类工作,它产生的不是一般输出,而是可使用退出状态,test接受各种不同的参数,可控制它要执行哪一种测试
语法:
test [ expression ]
test [ [expression] ]
用途:
为了测试shell脚本里的条件,通过退出状态返回其结果。
行为模式:
主要选项与表达式:
string string不是null
-b file file是块设备文件(-b)
-c file file是字符设备文件(-c)
-d file file为目录(-d)
-e file file是否存在
-f file file是一般文件(-)
-g file file有设置它的setgid位
-r file file是可读的
-s file file是socket
-w file file是可写的
-x file file是可执行的,或file是可被查找的目录
s1 = s2 s1与s2字符串相同
s1 != s2 s1与s2字符串不相同
n1 -eq n2 整数n1与n2相等
n1 -ne n2 整数n1与n2不相等
n1 -lt n2 整数n1小于n2
n1 -gt n2 整数n1大于n2
n1 -le n2 整数n1小于或等于n2
n1 -ge n2 整数n1大于或等于n2
-n string string是非null
-z string string为null特殊参数变量
在bash shell中有些特殊变量,它们会记录命令行参数的个数。例如$#
你可以只数一下命令行中输入了多少个参数,而不同测试每个参数。bash为此提供了一个特殊的变量,就是上面所提到的$#
$#的说明
范例:
下面来说下${!#}的作用?
既然$#变量含有参数的总数量,那么${!#}可以调用最后一个参数的变量名称。
范例:
vim Count-1.sh
#!/bin/bash
#Script Name: Count-1.sh
# Print last parameter
params=$#
echo "The last parameter is "$params"
echo "The last parameter is "${!#}"
:wq
chmod +x Count-1.sh
./Count-1.sh 1 2 3
The last parameter is 3
The last parameter is 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。