Chinaunix首页 | 论坛 | 博客
  • 博客访问: 236813
  • 博文数量: 149
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1127
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-26 15:53
个人简介

喷泉之所以漂亮,是因为她有压力;瀑布之所以壮观,是因为她没退路。

文章分类

全部博文(149)

文章存档

2016年(25)

2015年(124)

我的朋友

分类: LINUX

2015-11-13 17:18:38

一.Bash name
BASH = GNU Bourne-Again Shell (权威)
BASH = Born-Again Shell
BASH is a Shell in Linux, is linux default shell, execute in /bin/bash
BASH 是 Linux 操作系统上的一个 Shell,是由 /bin/bash 解释执行的。BASH支持 IEEE POSIX P1003.2/ISO 9945.2 脚本语言工具标准。

others:
Bourne shell (sh)
C shell (csh)
Korn shell (ksh)

二.Bash basis grammar
2.1  Hello world  e.g.:
order: gedit hello
#!/bin/bash
#This is a very simple example
echo Hello World
order:
1)bash hello
2)sh hello
3)chmod u+x hello, ./hello
display: Hello World
BASH 程序被执行后,实际上 Linux 系统是另外开设了一个进程来运行的

2.2  stdin. stdout. stderr
在 Linux 系统中:
标准输入(stdin)默认为键盘输入;
标准输出(stdout)默认为屏幕输出;
标准错误输出(stderr)默认也是输出到屏幕(上面的 std 表示standard)

输入、输出及标准错误输出主要用于 I/O 的重定向,就是说需要改变他们的默认设置
I/O redirection e.g.:
ls > ls_result
ls -l >> ls_result
ls order result output redirection to file ls_result

2.3  Bash simple variable
a.
#!/bin/bash
# give the initialize value to STR
STR="Hello World"
echo $STR
display: Hello World
note:
1)变量赋值时,'='左右两边都不能有空格;
2)BASH 中的语句结尾不需要分号(";");
3)除了在变量赋值和在 FOR 循环语句头中,BASH 中的变量使用必须在变量前加"$"符号
4)BASH 程序是在一个新的进程中运行,所以该程序中的变量定义和赋值不改变其他进程或原始Shell 中同名变量的值,也不会影响他们的运行
5)$STR 自不过是对 ${STR} 的一种简化, 一般最好加{}

b.
#!/bin/bash
x=1999
let "x = $x + 1"
echo $x
x="olympic'"$x
echo $x
display:
2000
olympic'2000
整数运算一般通过 letexpr 这两个指令来实现
(变量x+1可写作: let "x = $x + 1" 或者 x=`expr $x + 1`)

2.4  compare operation:
在比较操作上,整数变量(integer)和字符串变量(string)各不相同
                             integer         string
same                        -eq              =
different                   -ne              !=
greater                     -gt               >
Less                          -lt                <
greater or equal        -ge
less or equal             -le
NULL                                           -z
not NULL                                     -n (! -z)

e.g.
compare string  whether a equel b :  if [ $a = $b ]
judge the string a whether is NULL:   if [ -z $a]
judge whether integer a greater than b : if [ $a -gt $b ]

2.5  BASH variable as file variable
judge whether the user can enter the /root direction:
if [ -x /root ]

2.6  About the local variable
e.g.
#!/bin/bash
HELLO=Hello
function hello {
    local HELLO=World
    echo $HELLO
}
echo $HELLO
hello
echo $HELLO
display:
Hello
World
Hello
执行结果表明全局变量 $HELLO 的值在执行函数 hello 时并没有被改变。局部变量 $HELLO 的影响只存在于函数那个程序块中

三. BASH 中的变量与 C 语言中变量的区别
note:
1) BASH 中的变量在引用时都需要在变量前加上 "$" 符号( 第一次赋值及在For 循环的头部不用加 "$"符号 )。
2) BASH 中没有浮点运算,因此也就没有浮点类型的变量可用。
3) BASH 中的整形变量的比较符号与C语言中完全不同,而且整形变量的算术运算也需要经过 let 或 expr 语句来处理。

3.1  if...then...else
a.
if [ expression ]
then
    statements
fi

b.
if [ expression ]
then
    statements
else
    statements
fi

c.
if [ expression ]
then
    statments
else if [ expression ]
    then
        statments
    else
        statments
fi

d.
if [ expression ]
then
    statments
elif [ expression ]
    then
        statments
    else
        statments
fi

e.g.
#!/bin/bash
if [ $1 -gt 90 ]
then
    echo "Good, $1"
elif [ $1 -gt 70 ]
    then
        echo "OK, $1"
    else
        echo "Bad, $1"
fi
exit 0
order: ./demo 91
display: Good, 91
如果将 if 和 then 简洁的写在一行里面,就必须在 then 前面加上分号,如:if [ expression ]; then ... 。

3.2 for
for $var in [list]
do
    statments
done
其中 $var 是循环控制变量,[list] 是 $var 需要遍历的一个集合,do/done 包含了循环体
如果 do 和 for 被写在同一行,必须在 do 前面加上 ";"。如: for $var in [list]; do

a.
e.g.
#!/bin/bash
for day in Sun Mon Tue Wed Thu Fri Sat
do
    echo $day
done
display:
Sun
Mon
Tue
Wed
Thu
Fri
Sat

b.
# 如果列表被包含在一对双引号中,则被认为是一个元素
if add " ", like this:
#!/bin/bash
for day in "Sun Mon Tue Wed Thu Fri Sat"
do
    echo $day
done
display:Sun Mon Tue Wed Thu Fri Sat
注意上面的例子中,在 for 所在那行的变量 day 是没有加 "$" 符号的,而在循环体内,echo 所在行变量 $day 是必须加上 "$" 符号的。

c.
如果写成 for day 而没有后面的 in [list] 部分,则 day 将取遍命令行的所有参数
if no in [list] part, like this:
e.g
#!/bin/bash
for param
do
    echo $param
done
exit 0
order:./demo hello ray 123
display:
hello
ray
123

3.3 while
while [ condition ]
do
    statments
done

e.g.
a.
#!/bin/bash
while [ $1 = "cat" ]
do
     echo "OK, $1 equal cat"
done
order:bash while cat
display:
cat equal cat
cat equal cat
cat equal cat
..................

b.
#!/bin/bash  
sum=0  
i=1  
while(( i <= 10 ))  
do  
     let "sum+=i"  
     let "i += 2"     
done  
echo "sum=$sum"
order:bash whi;e1
display: sum=25

3.4 until
until [ condition is TRUE ]
do
    statments
done

e.g.
a.
#!/bin/bash  
i=0  
until [[ "$i" -gt 5 ]]    #大于5  
do  
    let "square=i*i"  
    echo "$i * $i = $square"  
    let "i++"  
done
order:bash until.sh
display:
0 * 0 = 0
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
5 * 5 = 25

3.5 case
case "$var" in
   condition1 )
      statments1;;
   condition2 )
      statments2;;
   ...
   * )
   default statments;;
esac

e.g.
#!/bin/bash
export LC_ALL=C

echo "Hit a key, then hit return."
read Keypress
case "$Keypress" in
   [A-Z] ) echo "Lowercase letter";;
   [a-z] ) echo "Uppercase letter";;
   [0-9] ) echo "Digit";;
   * ) echo "Punctuation, whitespace, or other";;
esac
exit 0

3.6 break/continue

3.7 function
a.
function my_funcname {
   code block
}

b.
my_funcname() {
   code block
}




阅读(471) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~