首页 > 代码库 > shell编程
shell编程
shell
变量
----特殊变量:
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
-----内部变量
$BASH:记录bash shell的路径
$BASE_VERSION:记录bash shell的版本信息
$DIRSTACK:显示目录栈的栈顶值
pushd:用于将目录压入栈
popd:栈顶目录弹出
$HOSTNAME:记录了主机名
$SECONDS:记录脚本从执行到结束耗费的时间
命令替换
是指将命令的标准输出作为值赋给某个变量,有两种方式
1.使用`linux命令`
2.$(linux命令)
字符串处理
计算字符串的长度:
${#....}和 expr length
索引命令:在字符串string上第一次匹配substring的位置,没有返回0
expr index $string $substring
匹配命令 :返回匹配到的substring的长度,没有返回0
expr match $string $substring
抽取字符串
#{string:position}
#{string:position:length}
grep常用命令:
-i 忽略大小写
-v 查找不包含匹配项的行
-l 从多个文件中查找包含匹配项
-c 打印匹配的行数
-r 递归搜索子目录
find命令:
用法 find 路径 选项 操作
选项有 name 按文件名
perm 按文件权限
mtime -n +n 按文件更改时间 -n 代表在n天内 +n 代表在n天前
-ok/-exec 对匹配的文件执行shell命令
正则表达式:
\ 忽略正则表达式中特殊字符的原有含义
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
\< 从匹配正则表达式的行开始
查找当前目录下含有关键字route的文件:
find ./ -name ‘*‘|xargs grep ‘route‘
查找当前目录下后缀名为.txt文件含有关键字route:
find ./ -name ‘*.txt‘ | xargs grep ‘route‘
DATE
date命令提供了日期的加减运算
date +%Y%m%d --date="-1 day" 可以得到昨天的时间
data -s 设定当前时间
date -s “01:01:01 2008-05-23″ 可以设定当前系统时间
时间的加减
显示现在的年月日 date +%Y%m%d
date +%Y%m%d --date="+1 day"? //显示后一天的日期
date +%Y%m%d --date="-1 day"? //显示前一天的日期
date +%Y%m%d --date="-1 month"? //显示上一月的日期
date +%Y%m%d --date="+1 month"? //显示下一月的日期
date +%Y%m%d --date="-1 year"? //显示前一年的日期
date +%Y%m%d --date="+1 year"? //显示下一年的日期
shell中特殊符号汇总:
~
账户的home目录:~+ 当前的工作目录,~- 上次的工作目录
; 分号
在 shell 中,担任”连续指令”功能的符号就是”分号”
‘string‘ 单引号
被单引号用括住的内容,将被视为单一字串。在引号内的代表变数的$符号,没有作用,也就是说,他被视为一般符号处理,防止任何变量替换。
"string" 双引号
被双引号用括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展
? 问号
在文件名扩展(Filename expansion)上扮演的角色是匹配一个任意的字元,但不包含 null 字元
* 星号
相当常用的符号。在文件名扩展(Filename expansion)上,她用来代表任何字元,包含 null 字元。
循环结构
if判断
----简单if结构
if expression
then
....
fi
----if/else结构
if expression
then
....
else
....
fi
case结构(常用于根据表达式的值来选择要执行的语句)
case variable in
value1)
.....;;
value2)
.....;;
value3)
.....;;
esac
for循环
----列表for循环
for variable in {list}
do
....
....
done
----不带列表的for循环(由用户指定参数和参数的个数)
for variable
do
....
....
done
----类c风格的for循环
for ((expr1;expr2;expr3))
do
....
done
while循环
while expression
do
....
done
shell编程