Bash脚本编程教程(一): Bash脚本编程简介

秒杀包邮! julius 极度帅气日历 流行 人气 男表 男士 手表 9801
129.0元 

声明:这是本人订阅的一个国内牛人的博客,每天翻阅该博客,收获甚丰,但不敢专享,因此希望通过小弟的翻译,能够众乐乐。E文好点就不用再看本人的烂翻译了,可以猛击这里 进行订阅,或直接忽视下面的。谢谢,另外欢迎拍砖。

 

这次先从bash脚本编程这个系列开始,希望能做到跟上大牛的步伐,每天一篇。哈哈。

 

原文地址在这里:http://www.thegeekstuff.com/2010/03/introduction-to-bash-scripting/

 

Bash Scripting Introduction Tutorial with 5 Practical Examples

和我们正在进行的 Unix Sed Unix Awk 这个两个系列相同,我们决定发表一些关于 Bash 脚本编程( Bash Scripting )的文章,在这些文章中,我们打算通过举例这种形式覆盖 Bash 脚本编程的全部技巧。

 

Shell 是一个程序,它能解释用户的命令。这些命令或者是直接由用户输入,或者是在调用 shell 脚本时从一个文件中读入的。

这样 shell 就有了两种分类,当它能接受用户的直接输入时,我们称它为交互式的 shell interactive shell )。当它接受来自文件的命令并能执行这些命令时,我们称它为非交互式的 shell non-interactive shell )。这种情况下,就像用户直接输入命令一样, shell 从上到下地读取输入文件中的每一行,并执行它们。

 

打印 shell 的内建变量 $- ,我们可以知道当前 shell 是不是交互式的( interactive or non-interactive .

bash-3.00# echo $-

himBH

注:如果当前 shell 是交互式时,那么返回的结果应该包含一个字母“ i ”。

 

Unix 系统里有许多不同的 shell Bourne Shell(sh), Bourne again Shell(bash), C Shell(csh), Korn Shell(ksh), Tenex C Shell(tcsh). 使用 Unix 命令 which whereis ,你可以知道上述 shell 的位置,如下所示。

# which bash

/bin/bash

# whereis bash

bash: /bin/bash /usr/share/man/man1/bash.1.gz

因此,你可以通过输入不同 shell 的名字,切换到新的 shell 。比如,输入 csh 并回车,你就进入了 C Shell.

 

编写并执行 Shell 脚本 (Shell Script)

1.  Hello World Bash Script

1. 使用你最熟悉的编辑器( editor )编写下面的两行代码,并保存到一个文件中。

$ cat helloworld.sh

#!/bin/bash

echo Hello World

2. 
为这个文件选择一个名字,但是该名字不能和
Unix
内建的命令相同
3.
脚本总是以“ #! ”这两个字符开始的,你可以读作“ she-bang ”,这表明当前文件是一个脚本,并且应该使用 /bin/bash 进行解释
4.
执行该脚本,如下所示。如果你不会执行脚本,那么可以参考 脚本执行教程

$bashhelloworld.sh

Hello World

5. 
当你执行命令“
bash helloworld.sh”
时,非交互式
shell
被启动,文件名被作为一个参数传递给了当前
shell。
6.
文件中第一行用来告诉操作系统哪个 shell 应该用来执行该 脚本。
7. 
在上面的例子中,
bash
从上到下地解释脚本文件,并且执行文件中的命令。
8. 
你甚至不需要“
bash
”就能执行上述
脚本.
9. echo
是一个能够输出我们传递给它的参数的程序,也能用于打印变量的值。

Bash 启动时用到的文件

在早先的文章“ .bash_profile 和相关文件的执行序列 ”中,我们曾讨论过,当一个交互式 shell 启动时,它首先会读取并执行来自 /etc/profile 的命令。如果 /etc/profile 文件不存在,那么 shell 会按照给定的顺序读取并执行来自 ~/.bash_profile ~/.bash_login 以及 ~/.profile 的命令。选项 -noprofile 会在 shell 启动时限制这种行为。

通常 bash_profile 会执行 ~/.bashrc 。如果你喜欢,你可以显示一条欢迎消息。只有你第一次登录时 shell 才会这样执行。你可以定义你需要的变量,也可以定义那些你将要用到的别名 (aliase) 。从已登录的 shell 退出时, Bash 会读取并执行那些来自 ~/.bash_logout 的命令。

2 .在登录时打印欢迎信息

在你的 bash_profile 文件中添加如下内容。如果该文件不存在,那么创建该文件并添加以下内容。

$ cat ~/.bash_profile

hname=`hostname`

echo "Welcome on $hname."

当你登录到一个交互式 shell 时,就能看到如下所示的欢迎信息了。

Login as: root

root@dev-db's password:

Welcome on dev-db

3. 打印系统相关信息

在这个例子中,当你登录到一个交互式 shell 时,能看到安装在服务器内的内核的名称, bash 的版本,开机时间以及服务器上的时间。

$cat ~/.bash_profile

hname=`hostname`

echo "Welcome on $hname."

 

echo -e "Kernel Details: " `uname -smr`

echo -e "`bash --version`"

echo -ne "Uptime: "; uptime

echo -ne "Server time : "; date

登录交互式 shell ,它会打印如下信息。

login as: root

root@dev-db's password:

Welcome on dev-db

 

Kernel Information:  Linux 2.6.18-128 x86_64

GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

Copyright (C) 2005 Free Software Foundation, Inc.

Uptime:  11:24:01 up 21 days, 13:15 ,  3 users,  load average: 0.08, 0.18, 0.11

Server time : Tue Feb 22 11 :24:01 CET 2010

4. 打印最后登录信息

如果多个用户使用相同的账号登录同一台机器时,那么例如最后一次是从哪台机器登录的,登录的时间等细节可能会是最有用的信息。这个例子会在 shell 启动时打印最后登录的信息。

$ cat ~/.bash_profile

hname=`hostname`

echo "Welcome on $hname."

echo -e "Kernel Details: " `uname -smr`

echo -e "`bash --version`"

echo -ne "Uptime: "; uptime

echo -ne "Server time : "; date

 

lastlog | grep "root" | awk {'print "Last login from : "$3

 

print "Last Login Date & Time: ",$4,$5,$6,$7,$8,$9;}'

在登录过程中,你能看到如下信息:

login as: root

root@dev-db's password:

Welcome on dev-db

Kernel Information:  Linux 2.6.18-128 x86_64

GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

Copyright (C) 2005 Free Software Foundation, Inc.

Uptime:  11:24:01 up 21 days, 13:15 ,  3 users,  load average: 0.08, 0.18, 0.11

Server time : Tue Feb 22 11 :24:01 CET 2010

 

Last login from : sasikala-laptop

Last Login Date & Time:  Tue Feb 22 11 :24:01 +0100 2010

5. shell 启动时定义变量和别名

在你的 .bashrc .bash_profile 中最常用的命令就是 export alias

别名也就是用一段文本内容替代其它内容。当你使用别名时, shell 就会把你输入的内容用别名的内容替代。举个例子,如果你需要对 ls 建立一个别名 , 以便于有颜色地列出文件或者是目录,那么照下面的做吧:

alias  ls  'ls color=tty'

如果你把这行命令加入任何一个启动文件,当你执行 ls 命令, shell 就会用‘ ls –color=tty’ 替代 ls

Export 命令用来定义环境变量。各种不同的环境变量被系统和其他应用程序使用。这是一种能被任何应用程序和脚本读取的定义变量的方法。如果在定义一个变量时,不使用 export ,那么这个变量只存在于那个专门的进程。

在下面的例子中, HISTSIZE 环境变量将会被定义。以 # 开头的行是一个注释行。

$ cat /etc/profile

alias ls 'ls --color=tty'

 

# Setup some environment variables.

export HISTSIZE=1000

 

PATH=$PATH:$HOME/bin:/usr/bin:/bin/usr:/sbin/etc

 

export PATH

 

export SVN_SH=${SVN_ RSH -ssh}


秒杀包邮! julius 极度帅气日历 流行 人气 男表 男士 手表 9801
129.0元 

你可能感兴趣的:(Bash脚本编程)