码迷,mamicode.com
首页 > 系统相关 > 详细

linux----->shell高级编程----1

时间:2016-06-25 06:19:47      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:c语言   linux   程序   开发   shell   

   1. 背景

     Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。


    2. 分类与历史[由于历史原因,UNIX系统上有很多种Shell]

    • sh(Bourne Shell):由Steve Bourne开发,各种UNIX系统都配有sh。

    • csh(C Shell):由Bill Joy开发,随BSD UNIX发布,它的流程控制语句很像C语言,支持很多Bourne Shell所不支持的功能:作业控制,命令历史,命令行编辑。

    • ksh(Korn Shell):由David Korn开发,向后兼容sh的功能,并且添加了csh引入的新功能,是目前很多UNIX系统标准配置的Shell,在这些系统上/bin/sh往往是指向/bin/ksh的符号链接。

    • tcsh(TENEX C Shell):是csh的增强版本,引入了命令补全等功能,在FreeBSD、MacOS X等系统上替代了csh。

    • bash(Bourne Again Shell):由GNU开发的Shell,主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,bash从csh和ksh借鉴了很多功能,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。虽然如此,bash和sh还是有很多不同的,一方面,bash扩展了一些命令和参数,另一方面,bash并不完全和sh兼容,有些行为并不一致,所以bash需要模拟sh的行为:当我们通过sh这个程序名启动bash时,bash可以假装自己是sh,不认扩展的命令,并且行为与sh保持一致。



    3. 编写第一个脚本: [1.sh]

#! /bin/bash      #指定命令解释器shell
    cd ..             #切换到上一级目录
    ls                #显示当前目录下所有文件

# 表示注释, 解释器不解释注释后面的内容

#! 必须位于开头, 称为(Shebang), 它表示该脚本使用后面的指定解释器/bin/bash解释执行


    4. 执行shell脚本方法


    • 给该脚本回执行权限 如: chmod  a+x 1.sh    然后直接可执行

    • 通过  . 1.sh  执行

    • 通过 source 1.sh 执行

    • 通过指定sh执行  如: /bin/bash 1.sh   或 /bin/bin 1.sh     


    5. 基本语法


    • \ 用于去除后面的单个字符的特殊意义(回车除外)


    • 数算判断符

    • 送件判断符

    • -eq  等于

    • -ne 不等于

    • -gt 大于

    • -ge 大于或等于

    • -lt 小于

    • -le 小于或等于

    • -d 判断文件是否是目录

    • -f 判断文件是否是普通文件

    • -p 判断文件是否是管道文件

    • -r 判断文件是否有读权限

    • -w 判断文件是否有写权限

    • -x 判断文件是否有执行权限

    • -z 如果文件长度为0, 则返回0(真)

    • -n 如果文件长度为非0, 则返回0(真)

    • -a 与  如[ -p pipe -a $var2 = "sadsa" ] pipe是管道并且字符串相等

    • -o 或  如[ -p pipe -a $var2 = "sadsa" ] pipe是管道或者字符串相等

    • `命令` 展开命令  如  sea=`ls`  此时sea保存的是当前目录下所有的文件列表

    • $(命令)如上

    • * 匹配0个或多个任意字符

    • ? 匹配一个任意字符

    • [若干字符] 匹配括号内任意一个字符并出现一次

    • 变量分类

    • 变量使用:

      变量名定义  变量名=变量值 (等号两边不能有空格) 如 sea="hello world!"

      $变量名: 取变量的值 如sea="hello world!"  echo $sea  输出结果hello world!

      删除已定义的变量: unset 变量名  如  unset sea

    • 内置变量

    • 环境变量: 环境变量由父进程传给子进程, 指当前系统的env环境变量

    • 本地变量: 在脚本内定义的变量我们统称为本地变量,如 sea="hello wolrd!"

    • $? 上一次命令执行结果

    • $$ 当前进程pid

    • $0 当前脚本文件名

    • $[1-n] 脚本参数

    • $@ 所有参加列表

    • $* 同上

    • $# 参数的个数

    • 变量:

    •  字符统配符

    • 命令展开

    • 算术:

    • 转义字符

简单的输出语句脚本:

#! /bin/sh

#print hello world            #注释
#authors sea 2016/06/24       


/bin/echo "hello world!"    #打印hello world

/bin/pwd                    #输出当前路径
/bin/ls                     #输出当前目录下所有文件

/bin/ls | wc                #统计当前目录下所有文件
/bin/echo "sea"             #输出sea

/bin/ps aux                 #输出当前进程详细情况

         提示: 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一

本文出自 “sea” 博客,请务必保留此出处http://lisea.blog.51cto.com/5491873/1792761

linux----->shell高级编程----1

标签:c语言   linux   程序   开发   shell   

原文地址:http://lisea.blog.51cto.com/5491873/1792761

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!