• 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
    
    

    过程截图:

  • 相关阅读:
    C#生成MD5的方法
    平常心是道
    Android 三种动画的使用 – Tween Animation
    17个Javascript日期选择器
    Javascript解码编码常用函数
    mysql 命令行导入导出数据
    技术驱动还是产品驱动
    Ubuntu 和 Redhat / Fedora 服务管理命令对比表
    jquery常用技巧
    Fedora 17安装JDK1.7
  • 原文地址:https://www.cnblogs.com/WANGYUHAN/p/15327872.html
Copyright © 2020-2023  润新知