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

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] 脚本参数
    • [email protected] 所有参加列表
    • $* 同上
    • $# 参数的个数
    • 变量:
    • 字符统配符
    • 命令展开
    • 算术:
    • 转义字符

简单的输出语句脚本:

#! /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用户的必修 功课之一。

时间: 2024-08-04 00:06:18

linux----->shell高级编程----1的相关文章

Linux Shell 高级编程技巧4----几个常用的shell脚本例子

4.几个常用的shell脚本例子    4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释    4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash current_PID=$$ ps -aux | grep "/usr/sbin/httpd" | grep -v "grep" | awk '{print $2}' > /tmp/${current_PID}.txt for pid in `cat /tmp/${

Linux Shell 高级编程技巧3----运行级别脚本介绍

3.运行级别脚本介绍    3.1.运行级别        运行级别介绍:            0    关机            1    单用户模式            2    多用户模式,没有NFS服务            3    多用户模式            4    目前还没有使用            5    X windows 的启动模式            6    重启计算机        运行级别对应的目录(/etc/rcN.d,N是数字0.1.2...)

Linux Shell 高级编程技巧2----shell工具

2.shell工具    2.1.日志文件        简介            创建日志文件是很重要的,记录了重要的信息.一旦出现错误,这些信息对于我们排错是非常有用的:监控的信息也可以记录到日志文件        常用的日志文件的方法            以时间为标识的日志文件                例子 #!/bin/bash #当前的日期 current_date=`date "+%Y%m%d"` #今天的日志文件名 todaylog="log/${cu

Linux Shell 高级编程技巧1---深入讨论(awk、<<)

1.深入讨论(awk.<<)    1.1.深入讨论awk        记录和域,模式和动作,正则表达式和元字符            基础教程中已经介绍        条件和逻辑操作符            <    小于            >=    大于等于            <=    小于等于            ==    等于            !=    不等于            ~    匹配正则表达式            !~    

Linux Shell脚本编程学习笔记和实战

http://www.1987.name/141.html shell基础 终端打印.算术运算.常用变量 Linux下搜索指定目录下特定字符串并高亮显示匹配关键词 从键盘或文件中获取标准输入 [read命令] 文件的描述符和重定向 数组.关联数组和别名使用 函数的定义.执行.传参和递归函数 条件测试操作与流程控制语句 获取时间日期格式和延时 [date.sleep命令] 内部字段分隔符IFS和脚本的调试DEBUG 显示.读取或拼接文件内容 [cat命令] 文件查找与打印文件列表 [find命令]

18道Shell高级编程企业实战题及参考答案(一)

Shell高级编程企业实战题参考解答 ########################################################################### 让我们一起感谢,本文内容答案完全来自老男孩教育的学生-张耀课前上机考试解答! ########################################################################### 目录: 1.监控MySQL主从同步... 1 2.批量创建文件及改名... 3

linux shell 高级批处理

在DOS中有个'批处理'文件,将多条命令写进一个叫.bat的批处理. 在linux 中,也可以做到,并且功能更强大,我写的批处理是在ubuntu 12.04 LTS 我所要做的就是将U盘中的图片移到电脑中. 以下是代码实现: sudo mount /dev/sdd1/ /media/ cp /media/helloworld/程序/*.bmp /home/xyx/ahah tar -zcPvf /home/xyx/ahah/PIC`date +%Y%m%d`.tar.gz /media/hell

Linux C高级编程——文件操作之系统调用

Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神的无限的! 库函数是一些完成特定功能的函数,一般由某个标准组织制作发布,并形成一定的标准.使用库函数编写的函数一般可以应用于不同的平台而不需要做任何修改,具有很好的可移植性. 系统调用函数与操作系统直接相关,不同的操作系统所使用的系统调用可能不太一样,因此,如果两个操作系统差异很大,系统调用函数的可移植性就不高.例如windows采用的系统调用的应用程序不能直接在Linux下编译运行. 之所以使用系统调用是因为系统资源

Linux环境高级编程--介绍

从今天开始,将开启Linux环境高级编程(Advanced Programming Of Linux Enviroment)的学习笔记或者说总结,我将持续和大家分享自己的学习成果.本系列博客依托于lilin老师的课程,代码也基本上来自于课程的内容,在得到老师的同意和允许情况,我在github上新建了一个仓库和大家分享代码,仓库名称为APLE .有任何建议或者想法的可以一起参加进来改进代码. 首先,我们介绍下系列博客的基本内容,APLE系列主要是在掌握基本Linux API的基础上,封装了一套C+

Linux Shell脚本编程while语句

Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo    uptime    sleep 3done 2,把监控结果保存到文件,在后台执行,然后用tail -f监控文件变化[email protected]:~/linux/shell/flow_control$ sh while.sh &[1] 12867 #!/bin/bash while truedo    uptime >> log.txt    s