来源:(linux shell)第一章--小试牛刀(上)

从今天開始,我们一起来学习《linux shell脚本攻略》这本书。

1.1简单介绍

shell脚本一般是一个以#!起始的文本文件,例如以下所看到的:

#!/bin/bash

有两种运行shell脚本的方式,分别例如以下:

sh script.sh 或者./script.sh

可是在运行脚本曾经,我们须要给脚本运行权限才行,不然脚本无法运行

chmod a+x script.sh

在命令中行中,假设须要同一时候运行多个命令,能够使用

cmd1;cmd2

1.2中断打印

1.2.1 实战演练

echo 是用于中断打印的基本命令。

在默认情况下,echo在每次调用后会加入一个换行符。

仅仅须要使用带双引號的文本,结合echo命令就能够将该文本在中断上打印出来,类似的,不待双引號的文本也能够得到童谣的输出结果:

使用单引號看起来也能够完毕相同的任务:

这些方法看起来相思,但各有一些特殊用途和副作用,看看以下这行命令:

看到命令行抛出一个错误,说不能带有感叹号。因此,假设希望打印感叹号,那就不要将其放入双引號中,或者你能够在其之前加上一个特殊的转移字符斜杠将感叹号转移:

在使用带单引號的echo时,Bash不会对单引號中的变量(如$var)求值,而仅仅是照原样显示

还有一个能够打印的命令是printf,printf使用的參数和c语言中的printf函数一样。如:

看到没,printf打印出来的输出是没有带换行的。

1.2.2补充内容:

打印彩色输出。每种颜色都有相应的颜色码,比方:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37.要打印彩色文本,能够输入例如以下命令:

1.3 玩转变量和环境变量

1.3.1 实战演练

一个变量能够通过下面方式进行赋值:

var=value

var是变量名,value是赋给变量的值,假设value不包括不论什么空白字符,那么它不须要使用引號进行引用,生殖,则必须使用单引號或双引號。注意,var = value不同于var=value.把var=value改写成var = value使用常见错误,但前者是赋值操作,后者则是相等操作。在变量名之前加上$前缀就能够打印出变量的内容

var="value"

echo $var 或者echo ${var},能够看到下图中,第一个命令是错误的,第二三个命令整错打印出了变量内容:

我们也能够在printf或echo命令的双引號中引用变量值:

export命令用来环境变量设置。至此之后,从当前shell脚本运行的不论什么程序都会继承这个变量。我们能够依照自己的须要,在运行的应用程序或者shell脚本中导出特定变量。在默认情况下,有非常多标准环境变量可供shell使用。PATH就是当中之中的一个

$ echo $PATH

通常$PATH的值在/etc/environment或者/etc/profile或者~/.bashrc中定义。假设须要在PATH中加入一条新路径,能够使用:

export PATH=$PATH:/home/user/bin

1.3.2 补充内容:

获取字符串的长度,能够使用以下的方法或者:

识别当前shell的版本号:

echo $SHELL 或者echo $0

改动Bash提示字符串

当我们打开一个终端或是执行一个shell,都会看到类似user@hostname:/home/$的提示字符串。不同的GNU/Linux公布版本号中的提示及颜色也略有不同。我们能够利用PS1环境变量来定制提示文本。默认的shell提示文本是在文件~/.bashrc中的某一行设置的。能够使用例如以下命令列出设置PS1的那一行:

假设要设置提示字符串,能够输入:

PS1=">",例如以下图所看到的,提示符已经变成">"尖括号了,可是这种改动仅仅对当前的这个终端起作用,假设再新开一个终端或者电脑重新启动,则会恢复到改动曾经的提示符。要想设置之后生效,就必须改动~/.bashrc中的值才干够。

1.4 通过shell进行数学运算

1.4.1 预备知识

再Bash shell环境中,能够利用let,(())和[]运行主要的算术操作。而在进行高级操作时,expr和bc这两个工具也会很实用。

1.4.2 实战演练

能够用普通的变量赋值方法定义数值,这时,它会被存储为字符串。然而,我们能够用一些方法使它能像数字一样进行处理,例如以下图所看到的:

当然还能够进行变量的自增或者自减操作:

其他的算术操作方式:

bc是一个用于数学运算的高级工具,这个精密计算器包括了大量的选项。我们能够借助它运行浮点数运算并应用一些高级函数:

对设置bc參数的其他操作:

1.5 玩转文件描写叙述符和重定向

​1.5.1 预备知识

​我们在编写脚本的时候会频繁使用标准输入(stdin),标准输出(stdout)和标准错误(stderr)。通过内容过滤将输出重定向到文件是我们从事的基础任务之中的一个。当命令输出文本的时候,这些输出文本有可能是错误信息,也有可能是正常的(非错误的)输出信息。单靠查看输出的文本本身,我们没法区分哪些是正常的输出文本,哪些是错误文本。只是,我们能够通过文件描写叙述符来解决问题,将哪些与特定描写叙述符关联的文本提取出来。

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

​    ​0-----------stdin(标准输入)

​    ​1-----------stdout(标准输出)

​    ​2-----------stderr(标准错误)

​1.5.2 实战演练

​    ​用以下的方法能够将输出文本重定向或保存到一个文件里:

​    ​echo "This is a sample text 1" > temp.txt

​    ​这样的方法通过截取文件方式,将输出文本存储到文件temp.txt中,也就是说在把echo命令的输出写入文件之前,temp.txt中的内容首先会被清空。

​    ​接下来再看还有一个样例:

​    ​echo "This is a sample text 2" >> temp.txt

​    ​这样的方法将会将文本追加到目标文件里。

​    ​>和>>并不同样。虽然这两个操作符都能够将文本重定向到文件,可是前者会先清空文件,再写入内容,而后者将内容追加到现有文件的尾部。

​    ​

​    ​来看看什么是标准错误以及怎样对它重定向。当命令输出错误信息时,stderr信息就会被打印出来。看看以下的样例:

​    ​

这里,+是一个非法參数,因此将返回错误信息。注意:当一个命令错误发生并退回时,它会返回一个非0的退出状态;而当命令成功完毕后,它会返回数字0,退出状态能够从特殊变量$?中获得(在命令执行之后立马执行echo
$?,就能够打印出退出状态)

​    ​接下来,我们不让错误打印信息在终端,而是存入一个文件里:

​    ​注意命令是ls + 2>out.txt。错误信息输出到out.txt中

​    ​我们也能够将标准输出和标准错误信息一同来运行到同一个命令中:

​    ​能够看到,错误信息和标准输出被输出到不同的文件其中了。还能够通过例如以下的命令将stderr转换成stdout,使得stderr和stdout都被重定向到同一个文件里:

​    ​cmd 2>&1 output.txt 或者cmd &> output.txt。有时候,在输出中可能包括一些不必要的信息。假设你不想让终端中充斥着有关stderr的繁枝末节,那么你能够将stderr的输出重定向到/dev/null,保证一切都会被清除的干干净净。假设我们有三个文件,各自是a1,a2,a3。可是普通用户对文件a1没有“读-写-运行”权限。假设你须要打印文件名称以a起始的全部文件的内容,你能够使用cat命令:

​    ​能够看到,a1文件已经没有不论什么权限,可是由于我是用root用户登录,所以还是能够读内容的,假设其他用户读取a1,则会报错,这时我们就能够使用标准错误输出来捕获错误输出,然后输出其他文件的内容:

​    ​

​1.5.3
补充内容​    ​    ​

​    ​从stdin读取输入的命令能以多种方式接受数据。另外,还能够用cat和管道来制定我们自己的文件描写叙述符,比如:

​    ​cat file | cmd

​    ​cmd1 | cmd2

​    ​将文件重定向到命令:

​    ​cmd < file

(linux shell)第一章--小试牛刀(上)的更多相关文章

  1. (linux shell)第一章--小试牛刀(下)

    文章来源: (linux shell)第一章--小试牛刀(下) 1.6 数组和关联数组 1.6.1 预备知识 Bash同一时候支持普通数组和关联数组.普通数组仅仅能使用整数作为数组索引,而关联数组能够 ...

  2. (linux shell)第二章--命令之乐(一)

    文章来自于我的个人博客:(linux shell)第二章--命令之乐(一)    上一章我们描写叙述了一些linux shell中须要注意的一些语法.接下来我们開始了解linux shell的经常使用 ...

  3. Linux shell基础知识(上)

    Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...

  4. 【菜鸟学习Linux】-第一章-Linux环境搭建-安装VMware虚拟机

    本人菜鸟一个,刚毕业才上班2个月,现在用到Linux部署项目,这才开始学习Linux,以下是我在安装Linxu系统是遇到的一些问题,希望能给广大菜鸟们在学习的道路上提供帮助和指导,废话不多说!开工! ...

  5. Shell第一章《变量》

    shell前言 什么是shell shell-'壳' 命令解释器,一种应用程序 shell语言特点 SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称. Shell本身是 ...

  6. LinuxShell脚本攻略--第一章 小试牛刀

    使用 shell 进行数学运算: #!/bin/bash no1=; no2=; let result=no1+no2 echo $result result=$[ $no1 + no2 ] resu ...

  7. linux系统管理第一章作业

    上机作业: 1.请用命令查出ifconfig命令程序的绝对路径 [root@localhost ~]# which ifconfig /usr/sbin/ifconfig 2.请用命令展示以下命令哪些 ...

  8. Linux网络编程学习(一) ----- 概论和Linux模型(第一章第二章)

    1.什么是计算机网络,通信方式是什么? 计算机网络就是通过通信线路相互连接的计算机的集合,主要通过双绞线.同轴电缆.电话线或者光缆等有形传输介质通信,还有就是通过激光.微波.卫星等实现无线通信 2.W ...

  9. Linux Shell脚本攻略

    -Linux Shell脚本攻略 总结的来说,这本书很实践性和实用性强,都是给的具体的例子,直接可以在终端操作实践,比单纯只看不动手务实多了,另外就是,这本书涵盖的内容也比较广,从文本操作到服务器管理 ...

随机推荐

  1. 记录一次配置unix网络编程环境的过程和遇到的问题

    记录一次搭建unix网络编程环境过程中遇到的问题和总结 计算机环境虚拟机 linuxmint-18-xfce-64bit 1.打开unix网络编程.iso 把目录下的文件复制到某一目录,修改权限,可命 ...

  2. C语言利用va_list、va_start、va_end、va_arg宏定义可变参数的函数

    在定义可变参数的函数之前,先来理解一下函数参数的传递原理: 1.函数参数是以栈这种数据结构来存取的,在函数参数列表中,从右至左依次入栈. 2.参数的内存存放格式:参数的内存地址存放在内存的堆栈段中,在 ...

  3. 网络流系列算法总结(bzoj 3438 1061)

    网络流嘛,怎么看都是一堆逗逼题嘛,反正遇到还是都做不起嘛.... 网络流的模板非常简单,难点都在于建图,网络流的建图解决问题范围之广,下至A+B Problem,上至单纯形,线性规划.所以如果对于网络 ...

  4. http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/

    http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/

  5. OA学习笔记-004-Spring2.5配置

    一.jar包 (1)spring.jar (2)Aop包 aspectjrt.jaraspectjweaver.jar (3)动态代理 cglib-nodep-2.1_3.jar (4)日志 comm ...

  6. 【Xamarin开发 Android 系列 6】 Android 结构基础(上)

    原文:[Xamarin开发 Android 系列 6] Android 结构基础(上) 前面大家已经熟悉了什么是Android,而且在 [Xamarin开发 Android 系列 4] Android ...

  7. Android listview.item.clear()与listview.clear()的区别

    listview.clear()与listview.item.clear()的区别就是使用了listview.item.clear()后,listview控件中仍然保存着listviewitem项的结 ...

  8. 谈谈SpringMVC Validation

    2016-10-12 19:26:08,897 [INFO ] [http-nio-8032-exec-1] HttpHeaderValidator:84 - HttpHeaderValidator. ...

  9. bzoj1486

    这里学了一个新知识叫分数规划这道题目是求∑w[i]/S最小首先二分答案k,然后如果某个环∑w[i]/S<=k即∑w[i]<=k*S-->∑w[i]-k*S<=0--->∑ ...

  10. sql server 2008中id如何设为自增

    通过 IDENTITY 来设置 参数有2个,一个是“初始值” 一个是“增量”.默认情况下 INSERT 语句中,不能对 IDENTITY 的字段进行赋值. create table web_produ ...