linux学习之shell脚本

[本文是自己学习所做笔记,欢迎转载,但请注明出处: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'

   也可以自定义别名,如:

[email protected]:~$ alias lh='ls -lh'
[email protected]:~$ 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) 命令替换

   直接看这样一个命令

[email protected]:~$ 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。其实,执行过程是这样的,先执行` `中的命令,执行结果如下:

[email protected]:~$ 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) 管道

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

[email protected]:~$ ls | sort
Desktop
develop
iNodeClient
公共的
模板
视频
图片
文档
下载
音乐

  可以注意到,这是排序后的输出结果。

  6) 重定向

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

[email protected]:~/develop/worksapce/shell_workspace$ ls -l  >homefile.txt
[email protected]:~/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
[email protected]:~/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 音乐
[email protected]:~/develop/worksapce/shell_workspace$ sort < homefile.txt > homefile.txt.sort
[email protected]:~/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
[email protected]:~/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开头的文件,这种能力即称为模式匹配,在模式匹配中,一般使用正则表达式。

例如:

[email protected]:~/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无法认出其后的特殊字符,使其后的特殊字符失去特殊含义。

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

   &: 后台执行。

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

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

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

   < >: 重定向表示符。

   * ? []: 模式匹配符。

   $: 变量名的开头。

   #: 注释

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

时间: 01-15

linux学习之shell脚本的相关文章

linux学习之shell脚本 ------- 输入与输出

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020] 前面介绍了Shell脚本的基础和运算符等,今天再来看一下关于Shell脚本的输入与输出. Shell输入与输出的一些命令: echo read cat 管道 tee exec Shell输入与输出的一些概念: 文件重定向 标准输入.输出和错误 合并标准输出和标准错误 使用文件描述符 下面,我们挨个看每个命令的用法: 输入输出命令的用法: 1. echo 该命令的作用是可以显

linux学习之shell脚本 ------- 脚本参数传递

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020] 今天再来看一下如何向shell脚本传递参数,需要掌握两个命令,一个是 shift命令,另一个是getopts. 脚本参数传递 shift命令 用法: shift n 每次将参数位置向左偏移n位 假如我们要实现统计多个文件的总行数,就可以用到这个shift命令了,如下: opt2.sh #!/bin/bash #op2 static files total lines; st

linux学习笔记:shell脚本编程相关(上)

前言 unix/linux操作系统下的shell,是一种壳,其目的是提供一个用户与计算机相互交互的命令接口,通过输入各种命令,达到操作的目的. 与此同时,shell支持控制流程,进而可以组合出各种各样的应用实例. shell脚本的格式 首行shebang机制: bash脚本,首行添加#!/bin/bash [options] csh脚本,首行添加#!/bin/csh [options] ksh脚本,首行添加#!/bin/ksh [options] -- 描述脚本的注释部分: 包括Author,

Linux学习日记—shell脚本基础

在Linux的日常维护中,shell脚本是我们必不可少的日常管理之一:其作用是解决服务器的自动化维护工作,减轻管理员的工作量:如果想提高shell脚本的编写速度,必须要熟练使用vi编辑器的各种快捷键. [什么是shell]    Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的.但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,毕竟它使

Linux学习日记—Shell脚本与计划任务

本篇文章将以实现MySQL数据库的定期自动备份为目标,介绍Shell脚本与计划任务的完美协作过程.其中,Shell脚本负责具体的备份操作,Crond服务器负责控制备份周期. [确认备份方案] 备份主机:IP地址为192.168.4.110,通过机柜内网络连接目标主机. 数据库服务器:IP地址为192.168.4.11,MySQL服务监听端口为3306. 备份内容:对MySQL服务器中的studydb,coursdb库进行远程备份,每天凌晨2:30执行,每个库备份独立的.sql文件,然后压缩为.t

Linux学习-高级shell脚本编程(一)函数

引文: 通常编写shell脚本时,你会发现很多地方都要用到相同的代码或者说是相同的功能.如果是一段小代码,那无所谓.可如果多次使用而且还是相同的代码,我想你也会感觉很烦的.为了能够让代码重用,这就使用到函数了. 温馨提示 变量赋值的格式为: 变量名=变量值 注意事项: 变量名前面不应加美元"$"符号.(和PHP不同)等号"=" 前后不可以有空格.和C语言不同,Shell中不需要显式的语法来声明变量. 变量名不可以直接和其他字符相连,如果想相连,必须用括号:echo

linux学习19 shell脚本基础-bash脚本编程基础及配置文件

一.shell脚本编程 1.编程语言的分类,根据运行方式 a.编译运行:源代码 --> 编译器(编译) --> 程序文件 C语言: b.解释运行:源代码 --> 运行时启动解释器,由解释器边解释边运行:即源代码本身并不能运行,而是启动一个解释器的进程,把整个源代码的内容当做解释器的参数.因为其是边解释边运行因此运行过程中比起编译运行速度会差一些. c.无论是编译器还是解释器中间总需要另外一个程序,即在运行过程中全程参与,这就是我们说的翻译官,他需要将我们人能识别的代码转换成机器所能识别的

linux学习之shell脚本 ------- 控制流结构

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020] 今天开始学一些同其他高级语言一样的shell流控制结构 流控制语句: 1. if语句 语句格式: if condition1 then command1 else condition2 then command2 else command3 fi 注:if语句必须以fi终止. 如果没有condition2,则if语句可以简化为如下: if condition then co

linux学习之shell脚本 ------- 变量

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020] 今天来看一下Shell中的一些变量. 变量类型: Shell中有以下几种变量: 1) 本地变量 2) 环境变量 3) 位置变量 4) 标准变量 5) 特殊变量 1) 本地变量 本地变量在用户现在的Shell生命周期的脚本中使用. 用法: variable-name=value set: 可以显示本地所有的变量 注意,本地变量如果加上readonly,则该本地变量不能被修改,