Chinaunix首页 | 论坛 | 博客
  • 博客访问: 307950
  • 博文数量: 101
  • 博客积分: 2428
  • 博客等级: 大尉
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-24 13:16
文章分类

全部博文(101)

文章存档

2012年(3)

2011年(90)

2010年(8)

分类: LINUX

2011-03-25 14:06:35

查询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)
的结果就是命令的输出

即时文档
即时文档的开始是两个连续的小于号<<,然后是一个特殊的字符序列,该序列在文档的结尾处再次出现.
阅读(754) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~