查询bash版本:
/bin/bash -version
管道和重定向:
我们可以通过">"操作把标准输出重定向到一个文件.
ls -al > lsoutput.txt
如果我们对文件进行追加,需要使用">>"操作符
ps >> lsoutput.txt
如果想对标准错误输出进行重新定义,需要把文件描述符加到前面
"2>"
如果想把两组输出都捕获到同一个文件里去,可以使用"&"
$kill -1 1234 > killouterr.txt 2 > &1
"把标准输出重新定义到文件killouterr.txt, 再把标准错误重新定向到标准输出同样的地方去"
我们可能无需保留标准输出和标准错误,我们可以利用万能"垃圾桶" /dev/null让这些消息消失
$kill -1 1234 > /dev/null 2 > &1
=================================
管道
--------------
我们可以用管道操作符"|"把进程连接在一起,连在一起的进程可以同时运行, 并会随着数据流在他们之间的流动而自动协调.
$ps | sort | more
======================================
编写脚本程序
-----------------------
"#! /bin/sh" -----它是注释语句的一个特殊形式, "#!"告诉系统同一行紧跟着的那个参数是用来执行本文件的程序.
因为脚本程序原则上被看作shell的标准输入,所以它可以包含任何能够通过你的PATH环境变量引用到的UNIX命令.
把脚本程序设置为可执行程序
------------------------
1. $/bin/sh first.sh
2.chmod +x first.sh,
$first.sh
这样也许不能成功,可能是因为没有设置shell的环境变量PATH去查找当前子目录.一种解决办法是直接敲入 "PATH = $PATH:...", 另一种方法是编辑你的.bash_profile文件,把刚才这条命令加入到文件末尾,然后重新登陆.
最好使用 ./fitrst.sh
Shell程序设计方法
------------------------
变量:在shel中,使用变量之前不需要事先申明.
在shell里,在变量名前加$字符就可以获得它的内容,用echo命令就可以输出内容
在默认的情况下,所有的变量都是被认为并被保存为字符串,即使被赋值为数值时也是如此.
$salutation=7+5
$echo $salutation
7+5
-----------------------------------------------------------------------------------------------------
注意:如果字符串里包含着空格,就必须用引号把它们括起来.还要注意的是等号两边不能优空格.
------------------------------------------------------------------------------------------------------
像$foo这样的变量在引号中的行为取决于我们使用的引号类别.$放在双引号里,程序执行时候替换为它的值,如果放在单引号里,就不会出现替换现象.
条件测试: test 或 []
test -f ---检查一个文件是否存在
if test -f fred.c
then
...
fi
我们也可以
if [ -f fred.c ] // [] 和被检查的条件之间留出空格, [ 和test实际是一样的.
then
...
fi
1.字符串比较:
string1=string2
string1 !=string2
-n string ---------如果字符串不适空则结果为真
-z string ---------如果字符串是空结果为真
2.算数比较
expression1 [opt] expression2
opt: -eq / -ne -gt / -ge ()如果前一个表达式大于后一个表达式为真/...) --lt/-le (...小于..)
!expression
3.文件条件测试
-d file 子目录为真
-e file 存在为真 //历史遗留问题,把可移植, -f用的较多
-f file 普通文件为真
-r file 可读为真
-s file 长度不为零为真
-u file 如果文件的set-user-id属性位被设置则结果为真
-w file 如果文件可写为真
-x file 如果文件可执行结果为真
控制结构:
1. if conditon
then
statements
else
statements
fi
-----------------
for语句
for variable in values
do
statements
done
---------------
while语句
while condtion do
statements
done
----------------
until语句
until condtion
do
statements
done
-------------------
case语句
case variable in
pattern [ | pattern] ...) statements;
pattern [ | pattern]..) statements;
esac
example--->
#!/bin/sh
echo "is it moring? please answer yes or no"
read timeofday
case "$timeofday" in
yes) echo "Good Moring";;
no ) echo "Good Afternoon";;
*) echo "error!";;
esac
exit 0
-----------------end---------------
命令表
AND命令表和OR命令表
函数
function_name(){
statements
}
在调用一个函数之前永远要先对它进行定义!
break命令:用这条命令在控制条件尚未满足的情况下从封闭的for,while,until循环里中途推出.
":"命令是一个空命令 while :表示无限循环
continue命令 和C语言中的相同
"."句点命令 作用是执行当前shell中的某个命令
echo命令 输出后面带有一个换行符的字符串.
echo - n 去掉那个换行符号
eval命令对参数进行求值操作.
foo=10
x=foo
y='$'$x
echo $y --------输出"$foo"
--------------------
foo=10
x=foo
eval y='$'$foo
echo $y
显示输出是 10
exac 命令
第一个用法是 替换掉当前的shell exec wall "thank for all the fish"
第二个是修改当前的文件描述符
exit n命令
export命令把组为它参数的变量名导出到子shell里,使之称为子shell的环境变量
expr命令把它的参数当做一个表达式进行算数求值
x='expr $x + 1 '
printf命令
return 命令
set命令, 作用是为shell设定参数变量.
#! /bin/sh
echo the date is $(date)
set $(date)
echo the month is $2
exit 0
这段程序把date命令的输出设置为参数表,在通过位置参数$2取得月份的名字
shift命令
trap命令用来指定在接受到操作系统信号之后采取的行动,常见的用途是在脚本程序被运行时完成清扫收尾工作.
所谓"信号",简单说来就是以异步方式送达某个程序的事件,在默认的情况下它们通常会使得该程序终止运行
trap command signal
unset命令的作用是从环境中删除变量或函数.shell本身设定的只读变量不受这个命令的影响
命令的执行
$(command)的结果就是命令的输出
即时文档
即时文档的开始是两个连续的小于号<<,然后是一个特殊的字符序列,该序列在文档的结尾处再次出现.
阅读(821) | 评论(0) | 转发(0) |