linux学习之shell脚本 ------- 基础

时间:2022-09-18 15:34:03

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020]

Shell脚本基本元素:

#!/bin/bash
--- 第一行
#
--- 注释
变量
流程控制结构

  看一个简单的例子,学任何语言,我想大多数情况下都是从helloworld程序开始的,shell也是一门语言,我们也从helloworld开始。

  新建一个名为helloworld.sh的文件,在里面写入:

helloworld.sh

#!/bin/sh
#这是一个很简单的打印“hello world”的shell脚本
echo "hello world!"
  要执行这样一个简单的脚本,首先我们要给该文件可执行的权限。如下:

chmod u+x helloworld.sh 
./helloworld.sh
hello world!
  可以看出,通过这样一个简单的脚本就可以将“hello world”打印到屏幕上。

Shell特性: 

  一般而言,shell脚本有以下特性:

  1) 别名

  2) 命令替换

  3) 后台处理

  4) 变量

  5) 管道

  6) 重定向

  7) 模式匹配

  8) 特殊字符

  

  下面挨个介绍:

  1) 别名

   可以通过alias查看当前系统的别名,如我的系统别名如下:

alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
    也可以自定义别名,如:

jesson@jesson-HP:~$ alias lh='ls -lh'
jesson@jesson-HP:~$ lh
总用量 40K
drwxr-xr-x 2 jesson jesson 4.0K 12月 18 09:47 Desktop
drwx------ 4 jesson jesson 4.0K 12月 2 20:29 develop
drwxr-xr-x 8 jesson jesson 4.0K 12月 16 11:27 iNodeClient
drwxr-xr-x 2 jesson jesson 4.0K 12月 6 19:30 公共的
drwxr-xr-x 2 jesson jesson 4.0K 12月 6 19:30 模板
drwxr-xr-x 2 jesson jesson 4.0K 12月 6 19:30 视频
drwxr-xr-x 3 jesson jesson 4.0K 12月 16 14:51 图片
drwxr-xr-x 9 jesson jesson 4.0K 1月 15 20:22 文档
drwxr-xr-x 6 jesson jesson 4.0K 1月 15 20:45 下载
drwxr-xr-x 2 jesson jesson 4.0K 12月 6 19:30 音乐
   既然可以自定义别名,当然,也可以取消别名,其实很简单,直接输入unalias 别名 即可。

  2) 命令替换

   直接看这样一个命令

jesson@jesson-HP:~$ ls -l `cat /etc/shells`
-rwxr-xr-x 1 root root 920788 3月 29 2013 /bin/bash
-rwxr-xr-x 1 root root 100284 3月 30 2012 /bin/dash
lrwxrwxrwx 1 root root 4 12月 6 19:10 /bin/rbash -> bash
lrwxrwxrwx 1 root root 4 12月 6 19:10 /bin/sh -> dash
   可以看出,命令的结果是列出当前系统存在的shell。其实,执行过程是这样的,先执行` `中的命令,执行结果如下:

jesson@jesson-HP:~$ cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
    这个命令的执行结果打印出该文件的内容,然后,再执行ls -l 输出的每行 ,这样就按行列出所有的shell的详细信息,其实在命令中加入` `的作用就是命令替换。

  3) 后台处理

    一个终端可以同时运行多个后台程序。

   用法: nohup command &

            可以用jobs 查看当前的后台程序。

  4) 变量

    变量是用来存储信息的。如系统变量SHELL,PATH等,当然了也以自己定义变量了。

  5) 管道

   管道是把一个命令的输出连接到另一个命令的输入。如:

jesson@jesson-HP:~$ ls | sort
Desktop
develop
iNodeClient
公共的
模板
视频
图片
文档
下载
音乐
  可以注意到,这是排序后的输出结果。

  6) 重定向

    重定向与管道相关,可以改变程序的输入来源和输出地点,

jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ls -l  >homefile.txt
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ll
总用量 12
drwxrwxr-x 2 jesson jesson 4096  1月 16 00:30 ./
drwxrwxr-x 7 jesson jesson 4096  1月 16 00:28 ../
-rw-rw-r-- 1 jesson jesson  573  1月 16 00:30 homefile.txt
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ cat homefile.txt
总用量 40
drwxr-xr-x  2 jesson jesson 4096  1月 11 23:44 Desktop
drwxrwxr-x  4 jesson jesson 4096  1月 12 00:41 develop
drwxr-xr-x  8 jesson jesson 4096  1月 11 21:51 iNodeClient
drwxr-xr-x  2 jesson jesson 4096  1月 11 21:23 公共的
drwxr-xr-x  2 jesson jesson 4096  1月 11 21:23 模板
drwxr-xr-x  2 jesson jesson 4096  1月 11 21:23 视频
drwxr-xr-x  3 jesson jesson 4096  1月 14 23:26 图片
drwxr-xr-x  2 jesson jesson 4096  1月 11 22:46 文档
drwxr-xr-x  5 jesson jesson 4096  1月 16 00:26 下载
drwxr-xr-x 25 jesson jesson 4096  1月 12 00:48 音乐
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ sort < homefile.txt > homefile.txt.sort
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ll
总用量 16
drwxrwxr-x 2 jesson jesson 4096  1月 16 00:31 ./
drwxrwxr-x 7 jesson jesson 4096  1月 16 00:28 ../
-rw-rw-r-- 1 jesson jesson  573  1月 16 00:30 homefile.txt
-rw-rw-r-- 1 jesson jesson  573  1月 16 00:31 homefile.txt.sort
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ cat homefile.txt.sort
drwxrwxr-x  4 jesson jesson 4096  1月 12 00:41 develop
drwxr-xr-x 25 jesson jesson 4096  1月 12 00:48 音乐
drwxr-xr-x  2 jesson jesson 4096  1月 11 21:23 公共的
drwxr-xr-x  2 jesson jesson 4096  1月 11 21:23 模板
drwxr-xr-x  2 jesson jesson 4096  1月 11 21:23 视频
drwxr-xr-x  2 jesson jesson 4096  1月 11 22:46 文档
drwxr-xr-x  2 jesson jesson 4096  1月 11 23:44 Desktop
drwxr-xr-x  3 jesson jesson 4096  1月 14 23:26 图片
drwxr-xr-x  5 jesson jesson 4096  1月 16 00:26 下载
drwxr-xr-x  8 jesson jesson 4096  1月 11 21:51 iNodeClient
总用量 40
         容易看出,利用重定向可以很方便的指定程序的输入来源和输出,如上述例子中
sort < homefile.txt > homefile.txt.sort
sort的来源是homefile.txt文件,而输出也是文件,这里是homefile.txt.sort.

  7) 模式匹配

   如显示以txt为扩展名或以a开头的文件,这种能力即称为模式匹配,在模式匹配中,一般使用正则表达式。

例如:

jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ls -l *.txt
-rw-rw-r-- 1 jesson jesson 573 1月 16 00:30 homefile.txt  

  8) 特殊字符

   双引号(""): 用来使Shell无法认出空格,制表符和其他大多数特殊字符,这样“ls -l helloworld.sh” 表示一个值。

   单引号(''): 用来使Shell无法认出所有特殊字符。

   反引号(``): 用来替换命令。

   反斜杠(\): 用来使Shell无法认出其后的特殊字符,使其后的特殊字符失去特殊含义。

   分号(;): 允许在一行放置多个命令。

   &: 后台执行。

   括号(): 创建成组的命令。

   大括号{}: 创建命令块。

   竖杆(|): 管道表示符。

   < >: 重定向表示符。

   * ? []: 模式匹配符。

   $: 变量名的开头。

   #: 注释

   空格,制表符,换行符: 当作空白。