简单的说shell就是一个包含若干行Shell或者Linux命令的文件。对于一次编写,多次使用的大量命令,就可以使用单独的文件保存下来,

以便日后使用。通常shell脚本以.sh为后缀。在编写shell时,第一行一定要指明系统需要哪种shell解释用户的shell程序,如:#!/bin/sh,#!/bin/bash,#!/bin/csh,,#!/bin/tcsh和,#!/bin/ksh等。下面的run.sh则指明使用bash执行。

#!bin/bash

通常,shell脚本会以#!/bin/sh作为默认的shell程序

执行shell的方式有两种

第一种是为shell脚本加上可执行权限并执行,

//为shell脚本直接加上可执行权限并执行

         chmod 755 run.sh

          ./run.sh

第二种是通过sh命令执行shell脚本,例如执行当前目录下的run.sh脚本,命令如下:

//通过sh命令执行shell脚本

     sh run.sh

注意:那为何『 sh shell.sh 』也可以运行呢?

这是因为 /bin/sh 其实就是 /bin/bash(连结档),使用 sh shell.sh 亦即告诉系统,我想要直接以 bash 的功能来运行 shell.sh 这个文件内的相关命令的意思,所以此时你的 shell.sh 只要有 r 的权限即可被运行喔!而我们也可以利用 sh 的参数,如 -n 及 -x 来检查与追踪 shell.sh 的语法是否正确呢

2。输入输出重定向

Linux使用标准输入stdin和标准输出stdout,来表示每个命令的输入和输出,还使用一个标准错误输出stderr用于输出错误信息。

这三个标准输入输出系统默认与控制终端设备相联系在一起的。因此,在标准情况下,每个命令通常从它的控制终端中获取输入,将输出打印到控制终端的屏幕上。

但是可以重新定义程序的输入stdin和输出stdout,将它们重定向。最基本的方法就是将它们重定义到一个文件上去,从一个文件获取输入/输出到另外的文件中等。

2.1输入重定向

输入重定向使用小于号“<”可以实现。显示文件的cat命令就是将标准输入重定向到文件实现的。

//将/etc/fstab作为输入,重定向到cat命令

# cat /etc/fstab

  1. LABEL=/                 /                       ext3    defaults        1 1
  2. LABEL=/boot             /boot                   ext3    defaults        1 2
  3. none                    /dev/pts                devpts  gid=5,mode=620  0 0
  4. none                    /proc                   proc    defaults        0 0
  5. none                    /dev/shm                tmpfs   defaults        0 0
  6. /dev/hda3               swap                    swap    defaults        0 0
  7. /dev/cdrom              /mnt/cdrom              udf,iso9660 noauto,owner,kudzu,ro 0 0
  8. /dev/fd0                /mnt/floppy             auto    noauto,owner,kudzu 0 0

2.2输出重定向

输出重定向有两种方式,一种是直接输出,使用一个大于号“>”实现;

            另一种是以附加的方式输出,使用两个大于号“>>”实现。

      前者会覆盖原始的输出内容,而后者会添加到文件最后。以下通过实例说明其区别。

//ls命令重定向到/root/dir.txt并显示

ls >dir.txt

cat < dir.txt

anaconda-ks.cfg

install.log

install.log.syslog

//ls -l命令以附加的方式重定向到/root/dir.txt并显示

ls -l >>dir.txt

cat < dir.txt

anaconda-ks.cfg

install.log

install.log.syslog

总用量 24

-rw-r--r--  1   root   root   1245    7月22    21:07    anaconda-ks.cfg

-rw-r--r--  1   root   root   14522  7月22    21:01    intall.log

-rw-r--r--  1   root   root   2906    7月22     21:00   install.log.syslog

3。管道

管道和输入输出重定向十分类似。管道的作用是在一个命令的标准输出和另一个命令的标准输入之间建立一个通道。例如下面命令就是将ps -aux的标准输出传递给grep作为输入。

ps -aux | grep httpd

4.shell里的特殊字符

和其他编程语言一样,shell里也有特殊字符。常见的有美元符号($),反斜线(\)和引号

1。美元符号

美元符号表示变量替换,即用其后面指定的变量的值来代替变量。反斜线“\”为转义字符,转义字符告诉shell不要对其后面的那个字符进行特殊处理,只是当做普通字符。而shell下的引号情况比较复杂,分为三种:双引号("),单引号(')和倒引号(`)。他们的作用都不尽相同,以下一一说明。

2。双引号(")

双引号括起来的字符除$,倒引号(`)和反斜线(\)仍保留其特殊功能外,其余字符均作为普通字符对待。

3。单引号(')

由单引号括起来的字符都作为普通字符出现。

4。倒引号(`)

倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令,并以它的标准输出结果取代整个引号部分

示例1的代码及输出如下:

#echo "My current directory is `pwd` and logname is $LOGNAME"【双引号中的倒引号和美元符号保持原来的功能】

My current directory is /root and logname is root

示例2的代码及输出如下:

#echo "My current directory is `pwd` and logname is \$LOGNAME"【双引号中的转义字符保持原来的功能】

My current directory is /root and logname is $LOGNAME

示例3的代码及输出如下:

#echo 'My current directory is `pwd` and logname is $LOGNAME'【单引号里面的内容不变】

My current directory is `pwd`and logname is $LOGNAME

5。shell脚本的注释

shell脚本和其它编程语言一样,也拥有注释。注释方法为在注释行前加#号。

例如以下脚本:

  1. #!/bin/sh
  2. #Filename: comment.sh
  3. #Description:this script explains how to make a comment
  4. echo “This script explains how to make a comment ”

创建脚本时,脚本的第一行通常称为shbang(#!)行。当脚本启动后,UNIX内核检查文件的第一行以决定将要执行的程序类型。

shbang符号(#!)后面的路径是用来解释此脚本的shell位置。要正确使用这个特性,#!必须是文件中最前面的两个字符。如果

文件头部有空格字符或者空白行,则此特性被忽略,该行被解释为普通的注释行。

6。shell脚本的注释后-f的作用

之前是见过这样的写法:

  1. #!/bin/csh -f
  2. #Filename: comment.sh
  3. #Description:this script explains how to make a comment
  4. echo “This script explains how to make a comment ”

通常称作快速启动选项,-f开关通知shell启动时不加载.cshrc文件。

对ksh其shbang行可能为!/bin/ksh -p

对于bash可能!/bin/bash --noprofile
7.shell脚本中运算符

范例:

介绍shell脚本的更多相关文章

  1. shell脚本介绍
 shell脚本结构和执行
date命令用法
 shell脚本中的变量

  2. 学习 shell脚本之前的基础知识

    转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写sh ...

  3. linux 的基本操作(编写shell 脚本)

    终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...

  4. linux的基本操作(shell 脚本的基础知识)

    shell 脚本的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本 ...

  5. 学习shell脚本之前的基础知识

    日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...

  6. shell脚本之前的基础知识

    日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位 ...

  7. 转载:shell脚本之前的基础知识

    转载地址:http://www.92csz.com/study/linux/12.htm 第十二章 学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果 ...

  8. Linux Shell脚本编程-基础1

    概述:  shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...

  9. Linux | Shell脚本的编写

    Shell 脚本的介绍 Shell脚本通过Shell终端解释器当作人与计算机硬件之间的翻译官,用户可以通过它执行各种命令,不仅有简单的,还有复杂的,比如:判断.循环.分支等这些高级编程中才有的特性.S ...

随机推荐

  1. zTree应用实例详讲(3)

    zTree应用实例详讲(3) 上一讲中,已经讲到了重命名与删除.那么这一讲,我们来做新建文件夹. 其实新建是非常简单的,想一下我们想要的效果:点击新建,然后在一个节点下面出现一个新建的文件夹,并且与此 ...

  2. 在使用simplexml_load_file()函数读取xml文件时遇到<![CDATA[]]>,怎么让其进行解析

    simplexml_load_file ( '1394.xml', 'SimpleXMLElement', LIBXML_NOCDATA ); 使用这个函数里面的这两个参数

  3. Jwalk发布——一个比较小的Js动画库

    断断续续折腾了几个晚上终于于周日把Jwalk发布了,顺便用了下yahoo的前端框架-pure css ,很简洁,非常帅.推荐使用以下. 下面说下Jwalk是做什么的: 前端开发过程中经常会用到一些动画 ...

  4. bin文件和elf文件

    ELF文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件(Relocatable,或者Object File) 可执行文件(Executab ...

  5. Chrome插件i18n多语言实现

    i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称.Chrome插件框架中i18n的封装API: chrome.i18n.ge ...

  6. 【2013Esri全球用户大会精彩看点】ArcGIS 10.2移动产品新特性

    Ø 全新的应用Explorer for ArcGIS 在2013年第四季度,Esri将发布全新的应用Explorer for ArcGIS,它将联合Collector和Operations Dashb ...

  7. hdu 1559 最大子矩阵(DP)

    题目链接:点击链接 #include<stdio.h> #include<string.h> #define max(a,b) a>b?a:b int d[1005][1 ...

  8. Ubuntu下JDK+Tomcat+MySql环境的搭建

    主机在阿里云上,所以网络的配置都省了,只剩下软件的安装和配置 1.安装mysql 1.1 apt-get install mysql-server-5.5 安装过程中,有两次提示输入 mysql 的  ...

  9. js手机号批量滚动抽奖代码实现

    我们平时在看一些选秀节目或一些歌唱类比赛节目时经常会看到在现场的大屏幕上会有观众的手机号在滚动来选出谁是幸运观众或谁中了什么奖项,这些手机号都是现场观众或场外观众在给选手投票时产生的,当主持人一声开始 ...

  10. ASP.NET MVC之控制器传递数据到视图的四种方式

    前奏 1. 在新建项目中的Models文件下,新建Products类: public class Products { public int Id { get; set; } public strin ...