Linux shell 脚本攻略 第一章 小试牛刀

 1.1 简介

     1 打开终端后,就会出现一个提示符,形式通常如下

        [email protected]$ 或者[email protected]#

     2 $表示的是普通用户,#表示的是超级用户。超级用户是Linux中权限最高的用户

     3 有两种运行脚本的方式

        sh script.sh 或者是 path script (path是脚本所在的目录)

     4 在bash中每个命令是通过分号";"来分开的

 1.2 终端打印

     1 echo是用于终端打印的基本命令,在默认情况下echo在每次调用后都会添加一个换行符

     2 另一个可以用来终端打印的命令是printf,printf的参数和C语言中的printf函数一样

     3 在默认情况下,echo会将一个换行符追加到输出文本的尾部,可以使用-n来忽略结尾的换行符

     4 如果需要使用转义序列,则采用echo -e ”包含转义序列的字符串"这种形式

     

 1.3 玩转变量和环境变量

     1 我们可以使用pgrep来快速找到一个进程的pid,假如有一个gedti正在运行,那么我们通过pgrep gedit就可以快速知道这个gedit的进程id

     2 一个变量可以通过以下方式来进行赋值 var=value,var是变量名,value是变量值,如果value不包含任何空白字符,那么他不需要使用引号来进行引用,否则就需要使用引号进行引用

     3 环境是未在当前进程中定义,而从父进程中继承来的变量

     4 export命令用来设置环境变量

     5 获得字符串的长度 length=${#var},可以用来求变量var的长度

     

 1.4 通过shell进行数学运算

     1 在bash环境中,我们可以使用let (()) 和[]来进行基本的算数操作,在进行高级的运算中,可以使用expr和bc

     2 当使用let的时候,变量名之前是不需要再添加$,例如let res=num1+num2

     3 let支持++和--等各种操作

     4 操作符[]的使用方法和let命令类似,例如res=$[ num1 + num2 ]

     5 也可以使用(()),但是使用(())时,变量名之前要加上$,例如res=$(( num1 + num2 ))

     6 我们可以使用scale=2来将小数点位数设置为2

     3%F�述符和重定向

     1 文件描述符是于文件输入,输出相关联的整数,他们用来跟踪与打开的文件,最常见的文件描述符是stdin,stdout,stderr。

     2 文件描述符是与一个打开的文件或数据流相关联的整数,文件描述符0,1和2是系统预留的

        0 - stdin标准输入,1 - stdout标准输出,2 - stderr标准错误

     3 用下面的方法可以把输出文本重定向到一个文件中

        echo "this ...." > out , 这样便可以把输出的字符串重定向到out文件中

     4 >和>>并不相同,前者是会先清空文件再写入内容,而后者是会将内容追加到现有的文件的尾部

     5 当使用重定向操作符的时候,重定向的内容不会出现�%e="font-size:18px">1.5 玩转文件�导入文件。重定向操作默认使用标准输出

     6 >等同于1>;对于>>来说,等同于1>>

        2> out是把标准错误重定向到out文件会先清空out在输入

        2>> out是把标准错误重定向到out文件在out文件末尾直接加入

     7 借助重定向,我们可以使用stdin那样从文件中读取数据 cmd < file

     8 我们可以使用exec命令创建自定义的文件描述符

    

1.6 数组和关联数组

     1 bash同时支持数组和关联数组,普通数组只能使用整数做为数组索引,而关联数组可以使用字符串做为数组索引

     2 定义数组的方法有很多种

        第一种:array_var=(1 2 3 4 5),这些值会存储在以0为起始索引的连续位置上

        第二种:array_var[0]=1

                    array_var[1]=2

                    ......................

     3 打印特定元素的数组内容,${array_var[index]},将会打印处索引为index的内容

     4 以清单形式打印处数组中的所有值,${array_var[*]}

     5 打印数组的长度${#array_var[*]}

     6 在关联数组中,我们可以使用任意的文本做为数组索引,在普通数组中,只能用整数做为索引

     7 首先我们需要单独的声明语句将一个变量名声明为关联数组declare -A ass_array

     

1.7 使用别名

     1 别名有多种实现方式,可以使用函数,也可以使用alias命令

     2 可以按照以下方式来创建一个别名 alias new_command='command'

     3 alias命令的作用只是暂时的,我们要写在~/.bashrc中,然后用source ~/.bashrc这样就可以长久的使用别名

     4 如果要删除别名,我们可以使用unalias或者直接删除~/.bashrc

     

1.8 获取终端信息

     1 获取终端的行数和列数 tput cols 和 tput lines

     2 打印当前的终端名 tput longname

     3 删除当前光标位置到行尾的所有内容 tput ed

     

1.9 获取/设置日期和延时

     1 我们使用date来打印处日期

     2 打印纪远时 date +%s,纪远时被定义为从世界标准时间1970年1月1号0时0分0秒至当前时刻的总秒数

     3 用格式串结合+作为date命令的参数,可以按照你的选择打印出对应的格式和日期

     4 我们可以使用sleep time来延时time秒

     5 tput sc是用来存储光标位置,tput rc是恢复光标位置,tput ed是清除从当前光标位置到行末的内容

 

1.10

     1 使用-x,启动跟踪调试shell脚本,运行带有-x标志的脚本能够打出所执行的每一行命令及当前状态

     2 针对每一种情况,我们可以在脚本中设置启用或是禁止调试打印

        set -x 在执行时显示参数和命令

        set +x 禁止调试

        set -v 当命令进行读取时显示输入

        set +v 禁止打印输入

     3 我们可以直接使用shebang #!/bin/bash改成#!/bin/bash -xv不用其它显项直接进行调试

     

1.11

     1 函数定义

        function fname(){

                statements

        }

        或者是

        fname(){

                statements

        }

     2 只要使用函数名就可以调用某个函数 fname,就会执行fname函数

     3 参数可以传递给函数 fname arg1 arg2

     4 类似地,参数可以传递给脚本并通过script来访问

        $1 是第一个参数

        $2 是第二个参数

        $n 是第n个参数

        $# 算参数的个数

        [email protected] 被扩展成"$1" “$2" "$3"

        $* 被扩展成"$1c$2c$3",其中c是IFS的第一个字符

        [email protected] 用的比较多,由于$*把所有的参数都当作单个字符串,因此很少被利用

     5 在bash中每一条命令执行之后都会返回一个值,如果是0表示执行成功,其它表示执行失败

     

1.12

     1 我们使用管道pipe来连接每一个过滤器,例如$cmd1 | cmd2 | cmd3,这里组合了三个命令,cmd1输出传递给cmd2,而cmd2传递给cmd3,最终输出将会被打印或导入某个文件

     2 我们有两种方法取得命令序列的输出

        第一种:output=$(cmd),这样就会把cmd命令的结果输出到output上

        第二种:output=`cmd`,这样就会把cmd命令的结果输出到output上

     3 假设我们使用子shll或反引用的方法将命令的输出读入一个变量中,可以将它放入双引号中,以保留空格和换行符

1.13 字段分割符和迭代器

     1 内部字段分割符IFS是shell脚本中一个重要的概念,默认的IFS是空白字符(换行符,制表符或者空格)

     2 我们可以轻松的生成不同序列

        echo {1..50} 这样能够生成一个从1到50的序列

        echo {a..z} 这样能够生成a到z的序列

     3 for循环

        for i in list

        do

             statements

        done

     4 while循环

        while condition

        do

             statements

        done

     

1.14 比较和测试

      1 if条件

         if condition

         then

                statements

         elif condition

                statements

         else

                statements

         fi

       2 我们可以使用逻辑运算符来减少if else的使用

          [ condition ] && action 如果condition条件为真,那么执行action

          [ condition ] || action 如果condition条件为假,那么执行action

       3 算术比较

          -eq: 相等

          -ne: 不相等

          -gt: 大于

          -lt: 小于

          -ge: 大于等于

          -le: 小于或等于

        4 文件系统相关测试

          [ -f $file ] 如果给定的文件是普通文件则返回真

          [ -x $file ] 如果给点的文件具有执行权限则返回真

          [ -d $file ] 如果给点的文件是目录则返回真

          [ -e $file ] 如果文件file存在则返回真

          [ -c $file ] 如果给定的文件是字符设备文件则返回真

                [ -b $file ] 如果给点的文件是块设备文件则返回真

          [ -w $file ] 如果给点的文件具有可些权限则返回真

          [ -r $file ] 如果文件file具有可读权限则返回真

          [ -L $file ] 如果给点的文件file是一个符号链接文件则返回真

        5 字符串比较

          1 使用字符串比较的时候,最好使用双中括号,因为有时候采用单个中括号会产生错误

          2 [[ $str1 = $str2 ]],当str1等于str2的时候,返回真

                     [[ $str1 != $str2 ]],当str1不等于str2的时候,返回真
             [[ $str1 > $str2 ]],当str1大于str2的时候,返回真

             [[ $str1 < $str2 ]],当str1小于str2的时候,返回真

             [[ -z $str ]]如果str是空字符串返回真

             [[ -n $str ]]如果str是非空字符串则返回真

         6 test命令同样可以用来执行条件检测,有助于避免过多的括号

 

时间: 2014-01-14

Linux shell 脚本攻略 第一章 小试牛刀的相关文章

Linux shell 脚本攻略 第二章 命令之乐

2.1 用cat进行拼接     1 cat命令是一个日常会使用到的简单命令,cat本身表示concatenate(拼接)     2 用cat读取文件的一般格式是        cat file1 file2 file3....  // 这个命令将命令行参数的文件内容拼接在一起输出     3 cat命令不仅可以读取文件并拼接数据,它还能够从标准输入中进行读取.要从标准输入中读取,就要使用管道        stand_ouput | cat     4 cat命令可以用来压缩多个空行,使得被

Linux Shell 脚本攻略 ---- 第九章 管理重任p

9.1 收集进程信息     1 进程是程序的运行实例,运行在一台计算机中的多个进程各自分配了一个称为进程ID的唯一标识数字     2 同一个程序的多个实例可以同时运行,但是他们的进程ID却互不相同     3 一个进程包括多种属性,例如拥有该进程的用户,进程使用的内存数量,进程占用的CPU等     4 ps是收集进程信息的重要工具,它提供了信息包括:拥有进程的用户,进程的起始时间,进程所对应的命令行路径,进程ID,进程所属的终端,进程使用的内存,进程占用的CPU     5 top对应系统

Linux Shell 脚本攻略 - 第三章 以文件之名

3.1 生成任意大小文件     1 创建特定大小的文件最简单的方法是使用dd命令,dd命令会克隆给定的输入内容,然后将一份一模一样的副本写道输出     2 stdin,设备文件,普通文件等都可以作为输入,stdout,设备文件,普通文件等也可以作为输出     3 例子: dd if=/dev/zero of=data bs=1M count=1        该命令会在当面目录创建一个1MB大小的文件data,来看一下参数,if代表输入文件,of代表输出文件,bs代表以字节为单位的块大小,

Linux Shell 脚本攻略 ---- 第四章 让文本飞

4.1 正则表达式入门    1 正则表达式是基于样式匹配的文本处理技术的关键所在    2 正则表达式是用于绝大多数文本处理工具的一种语言    3 正则表达式的基本组成部分       正则表达式                 描述                             ^                      行起始标记                      $                      行尾标记                 .      

Linux Shell 脚本攻略 --- 第六章 B计划

6.1 用tar归档     1 tar命令可以用来归档文件,可以用tar将多个文件和文件夹保存为单个文件,同时还能保留所有文件属性,如所有者,权限等,由该命令创建的文件通常称为tarball     2 按照下面的方法,用tar对文件进行归档: tar -cf output.tar sources        例如tar -cf output.tar file1 file2 file3....        命令中的-c代表的是创建文件,-f代表的是指定文件名     3 向归档中添加文件可

Linux Shell 脚本攻略 ---- 第八章 当个好管家

8.1 统计磁盘的使用情况      1 磁盘空间是一种有限资源      2 df和du是Linux中用于统计磁盘使用情况的重要命令,df是disk free的缩写,du是disk usage的缩写      3 找出某个文件(或多个文件)占用的磁盘空间: du file1 file2 ...      // 统计结果默认是以字节作为计算单位      4 要获得某个目录中所有文件的磁盘使用情况,并在每一行中显示各个文件的磁盘占用详情,可以使用         du -a DIRECTORY

《雷顿兄弟:迷之屋》图文流程攻略第一章

雷顿兄弟:神秘的房间流程攻略1雷顿兄弟:神秘的房间流程攻略提到雷顿,相信大家最先想到的就是Level5推出的任系掌机平台的雷顿教授系列,如今雷顿终于顺利登陆iOS平台,主角也从大叔雷顿教授变成了他的儿子小哥儿雷顿教官,助手也从正太堀北真希路克变成了萝莉露西,作为牛爷爷最钟爱的系列作品之一,雷顿兄弟:神秘的房间怎可不玩?今天为大家带来的就是雷顿兄弟:神秘的房间攻略第一章--夹在三明治里的女人,和牛爷爷一起进入推理模式吧,GO!软件名称:<雷顿兄弟:谜之屋>价格:免费点击下载发布日期:2013年6

《雷顿兄弟:迷之屋》图文攻略第一章

雷顿兄弟-神秘的房间一:夹在三明治里的女人这个游戏是试玩版,游戏一共有两个案件,第一个案件汉化了,第二个没有汉化,所以下面是第一个案件的攻略.游戏开始,露西格雷拉出场,她来到阿尔凡蒂雷顿的办事处,露西是来担任新调查员的,此时雷顿出现,双方简单的相互介绍.雷顿最后给露西出题,通过测试后才可以真正上岗.第一章 夹在三明治里的女人案子的介绍:那是一间位于海边的休养旅馆,在充满海风香气的阳台上有一位女性被杀了.一共有三位嫌疑人,分别是:她的前恋人,旅馆服务员和清洁工.阅读每 个人的资料后,露西觉得他们都

《The Silent age沉默年代》攻略第一章

<沉默年代>第一章图文攻略1沉默年代是一款十分寂寥的游戏,这款游戏讲述了一个平凡的国土安全局清洁工在别无选择的情况下利用能够穿梭于现在和未来的时光机器尝试拯救世界的故事,这是一款解谜游戏,十分沉重的音乐氛围加上现在和未来两个空间里反差十分大的世界给人一种压抑的感觉,但这款游戏的创意和故事都很吸引人,是小编最喜欢的游戏类型,小编用了两个小时的时间通关了这款游戏,并为大家带来这一篇沉默年代的剧情攻略,攻略按照章节顺序分为五部分. 游戏名称:<沉默年代>价格:免费价格:免费点击下载更新日