• 20191323王予涵第十章学习笔记


    20191323王予涵第十章学习笔记

    一、知识点归纳

    sh脚本

    • sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句,使用chmod +x xx.sh使其可执行,之后运行sh文件。
    • sh脚本的第一行通常以#!组合开始,称为shebang。若未指定shebang,则运行默认sh即/bin/bash。

    sh脚本与C程序

    sh脚本和C程序有一些相似之处,但在根本上是不同的

    对于sh:

    1. sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行;
    2. sh脚本中的每个变量都是字符串;
    3. sh脚本中的第一个可执行语句是程序的入口点;

    对于C程序:

    1. C程序需要先编译链接到一个二进制可执行文件,之后通过主sh子进程运行二进制可执行文件;
    2. C程序中的每一个变量必须有一个类型;
    3. C程序需要有一个mian()函数作为入口点

    命令行参数

    sh脚本中可以通过(0-){n}访问命令行参数,其中需要注意的是:后10个参数必须被称为{$x},x>10。

    命令行参数:

    $# = 命令行参数(1到)n的数量
    $* = 所有命令行参数,包括(0 )S = 执行sh的进程PID
    $? = 最后一个命令执行的退出状态(若成功为0,否则为非0)

    sh变量

    内置变量:

    PATH

    HOME

    TERM

    ....

    用户自定义变量:

    可以使用任何符号作为变量

    未赋值的变量值为NULL字符串,所有变量都可以采用:变量 = 字符串的方式赋值。

    sh中的引号

    sh中的特殊字符:

    $、/、*、>、<等

    若要将这些特殊字符作为普通字符,需使用或者单引号来引用。

    其中,用于引用单个字符,单引号用于引用长字符串。

    单双引号的区别:

    • 单引号内没有替换;
    • 双引号用于保留双引号字符串中的空格,且会发生替换;

    sh命令

    • .file :读取并执行文件。
    • break [n]:从最近的第 n 个嵌套循环中退出。
    • cd [dirname]:更换目录。
    • continue [n]:重启最近的第 n 个嵌套循环。
    • eval [arg...]:计算一次参数并让sh执行生成的命令。
    • exec [arg...]:通过这个 sh 执行命令, sh 将会退出。
    • exit[n]:使 sh 退出,退出状态为 n 。
    • export [var...]:将变量导出到随后执行的命令。
    • read [var...]:从 stdin 中读取一行并为变量赋值。
    • set [arg...]:在执行环境中设置变量。
    • shift :将位置参数$2 $3...重命名为$1 $2...
    • trap [arg[n]:接收到信号 n 后执行参数。
    • umask [ ddd ]:将掩码设置为八进制数 ddd 的。
    • wait [pid];等待进程 pid ,如果没有给出 pid ,则等待所有活动子进程。
    • read 命令:当 sh 执行 read 命令时,它会等待来自 stdin 的输入行。它将输人行划分为几个标记,分配给列出的变量。

    在获得read的输入后,sh可能会测试输入的字符串,以决定下一步做什么

    Linux命令

    • echo:将参数字符串作为行回显到stdout,通常将多个空格压缩为一个(除非有引号);
    • expr:用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串;
    I = 123
    I = $(expr $I +1)
    

    实用命令:

    • awk:数据处理程序;
    • cmp:比较两个文件;
    • comm:选择两个排序文件共有的行;
    • grep:匹配一系列文件的模式;
    • diff:找出两个文件的差异;
    • join:通过使用相同的键来连接记录以比较两个文件;
    • sed:流或行编辑命令;sort:排序或合并文件;
    • tail:打印某个文件的最后n行;
    • tr:一对一字符翻译;
    • uniq:从文件中删除连续重复行。

    命令替换:

    当sh遇到'cmd'$(cmd)时,会优先执行cmd,并用执行结果字符串替换cmd。

    命令分组:

    在sh脚本中,使用{}()对命令进行分组;

    • {}:在相同环境下执行{}中的命令;

    • ():通过subsh进程执行()中的命令,subsh进程可在不影响父sh的情况下更改其工作目录;

    sh控制语句

    • 在sh中每个语句需单独在一行上,若用分号将多个语句隔开,则运行多个语句在同一行;
    • 在sh中0为TRUE,而非0为FALSE;

    if-else-fi语句

    if [condition]; then
    	statements
    else
    	statements
    fi
    

    字符串比较:

    if [s1 = s2]
    if [s1 != s2]
    if [s1 < s2]
    if [s1 > s2]
    

    作为整数比较:

    -eq           #等于
    -ne           #不等于
    -gt           #大于
    -lt           #小于  
    -ge           #大于等于
    -le           #小于等于
    

    文件比较:

    if [ -x name]

    -e filename #如果 filename存在,则为真
    -f filename #如果 filename为常规文件,则为真
    -d filename #如果 filename为目录,则为真 
    -r filename #如果 filename可读,则为真 
    filename1 -ef filename2 #如果 filename1与filename2相同,则为真
    

    if-elif-else-fi复合语句:

    if [condition1]; then
    	statements
    	elif [condition]; then
    		statements
    	#additional elif[condition3]; then
    	.....
    	else
    		statements
    	fi
    

    for语句

    每次迭代中,变量接受一个参数字符串值,并执行do和done之间的命令

    for VARIABLE in string1 string2 ... stringn
    	do
    		statements
    	done
    

    while语句

    当条件为真时,重复执行do-done语句,直至为假时退出

    while [condition]
    	do
    		statements
    	done
    

    until-do语句

    当条件为真时退出循环

    until [condition]
    	do
    		statements
    	done
    

    I/O重定向

    • .>file stdout转向文件,如果文件不存在,将会创建文件

    • .>>file stdout追加到文件

    • <file 将文件用作stdin;文件必须存在具有r权限

    • <<word 从“here”文件中获取输入,直到包含“word”的行

    sh中的通配符

    • file *:列出当前目录中所有文件的信息
    • ls *.c:列出当前目录中所有以.c结尾的文件
    • ?通配符:查询某文件名中的字符
    • []通配符:查询文件名中一对[]中的字符
    • file ???:有三个字符的所有文件名
    • ls *.??:点号后有2个字符的所有文件名
    • file [ab]:包含字符a或b的所有文件名
    • ls [xyz]:列出所有包含x、y或z的文件名
    • ls [a-m]:列出包含a到m范围内字符的所有文件名

    二、问题与解决思路

    一门程序语言有哪些必备的要素和技能?

    • 扎实的理论基础
    • 较强的学习能力
    • 较强的逻辑思维
    • 扎实的编码能力
    • 较强的debug能力

    这些要素和技能在shell脚本中是如果呈现出来的?

    • 通过前期对即将编写的shell脚本的需求了解;
    • 通过对即将编写的shell脚本的总体框架构建;
    • 通过对编写过程中遇到问题的自我学习解决;
    • 通过对编写完后对shell脚本的调试解决;

    三、收获

    shell脚本作为一种命令语言和程序设计语言,可以对任务进行批处理和重复处理,极大的节约了敲打命令的时间,提升了效率,降低了错误。

    通过对该门语言的学习及掌握,使我在以后对Linux中大量任务的处理更加熟练。

    四、实践用shell脚本检验文件类型

    代码:

    #! /bin/bash
    read -p "filename
    " file
    checkfile()
    {
        if [ -f $1 ]; then
    	return 0
        elif [ -d $1 ]; then
    	return 1
        else
    	return 3
        fi
    }
    
    checkfile $file
    if [ $? -eq 0 ]; then
        echo $file is a REG file
    elif [ $? -eq 1 ]; then
        echo $file is a DIR file
    else
        echo unknow file type
    fi
    
    

    过程截图:

  • 相关阅读:
    虚函数和纯虚函数
    MS CRM 2011中PartyList类型字段的实例化
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(4)
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(2)
    MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(二)
    MS CRM 2011 SDK 5.08已经发布
    MS CRM 2011 Q2的一些更新
    最近很忙
    Microsoft Dynamics CRM 2011最近的一些更新
    补一篇,Update Rollup 12 终于发布了
  • 原文地址:https://www.cnblogs.com/WANGYUHAN/p/15327872.html
Copyright © 2020-2023  润新知