LinuxShell 脚本攻略 笔记1

shell脚本通常是一个以shebang①起始的文本文件,如下所示:

#!/bin/bash shebang是一个文本行,其中#!位于解释器路径之前。/bin/bash是Bash的解释器命令路径。

有两种运行脚本的方式:

一种是将脚本作为bash的命令行参数,另一种是授予脚本执行权限,将其变为可执行文件。

将脚本作为命令行参数时的运行方式如下(#号后面的文本是注释,不必输入到命令行中): $ bash script.sh #假设脚本位于当前目录下 或者 $ bash /home/path/script.sh #使用script.sh的完整路径 如果将脚本作为bash的命令行参数来运行,那么就用不着脚本中的shebang了。

要是有需要的话,可以利用shebang来实现脚本的独立运行。对此必须设置脚本的可执行权 限,这样它就可以使用位于#!之后的解释器路径来运行了。就像这样: $ chmod a+x script.sh 该命令赋予所有用户script.sh文件的可执行权限。这个脚本能以下列方式执行: $ ./script.sh #./表示当前目录 或者 $ /home/path/script.sh #使用脚本的完整路径。

内核会读取脚本的首行并注意到shebang为#!/bin/bash。它识别出/bin/bash并在内部像这 样执行该脚本: $ /bin/bash script.sh

 

shebang这个词其实是两个字符名称的组合。在Unix的行话里,用sharp或hash(有时候是mesh)来称呼字符“#”, 用bang来称呼惊叹号“!”,因而shebang合起来就代表了这两个字符。详情请参考:http://en.wikipedia.org/wiki/ Shebang_(Unix)。(注:书中脚注均为译者注。)

 

 

在Bash中,每个命令或是命令序列是通过使用分号或换行符来分隔的。比如: $ cmd1 ; cmd2 它等同于: $ cmd1 $ cmd2。

 

基础使用:

一   终端打印相关

终端是交互式工具,用户可以通过它与shell环境进行交互。

echo: echo是用于终端打印的基本命令。 在默认情况下,echo在每次调用后会添加一个换行符。 $ echo "Welcome to Bash" Welcome to Bash

另一个可用于终端打印的命令是printf。printf使用的参数和C语言中的printf函数一 样。例如: $ printf "Hello world"

 

2. 打印彩色输出 在终端中生成彩色输出相当好玩,我们可以使用转义序列来实现。

每种颜色都有对应的颜色码。比如:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝 色=34,洋红=35,青色=36,白色=37。 要打印彩色文本,可输入如下命令: echo -e "\e[1;31m This is red text \e[0m" \e[1;31将颜色设为红色,\e[0m将颜色重新置回。只需要将31替换成想要的颜色码就可以了。 要设置彩色背景,经常使用的颜色码是:重置=0,黑色=40,红色=41,绿色=42,黄色=43, 蓝色=44,洋红=45,青色=46,白色=47。 要打印彩色文本,可输入如下命令: echo -e "\e[1;42m Green Background \e[0m"

%s、%c、%d和%f都是格式替换符(format substitution character),其所对应的参数可以置于 带引号的格式字符串之后。 %-5s指明了一个格式为左对齐且宽度为5的字符串替换(-表示左对齐)。如果不用-指定对 齐方式,字符串就采用右对齐形式。宽度指定了保留给某个变量的字符数。对Name而言,保留 宽度是10。因此,任何Name字段的内容都会被显示在10字符宽的保留区域内,如果内容不足10 个字符,余下的则以空格符填充。

 

 

二           

变量是任何一种编程语言都必不可少的组成部分,用于存放各类数据。

脚本语言通常不需要 在使用变量之前声明其类型。只需要直接赋值就可以了。

在Bash中,每一个变量的值都是字符串。 无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。有一些特殊的变量会被shell 环境和操作系统环境用来存储一些特别的值,这类变量就被称为环境变量。让我们来看一些实例。

查看变量:

变量采用常见的命名方式进行命名。当应用程序执行时,它接收一组环境变量。可以使用env 命令查看所有与终端相关的环境变量。对于进程来说,其运行时的环境变量可以使用下面的命令 来查看: cat /proc/$PID/environ

假设有一个叫做gedit的应用程序正在运行。我们可以使用pgrep命令获得gedit的进程ID: $ pgrep gedit 12501

假设有一个叫做gedit的应用程序正在运行。我们可以使用pgrep命令获得gedit的进程ID: $ pgrep gedit 12501 那么,你就可以通过以下命令获得与该进程相关的环境变量: $ cat /proc/12501/environ GDM_KEYBOARD_LAYOUT=usGNOME_KEYRING_PID=1560USER=slynuxHOME=/home/slynux

 

上面的命令返回一个包含环境变量以及对应变量值的列表。每一个变量以name=value的形 式来描述,彼此之间由null字符(\0)分隔。如果你将\0替换成\n,那么就可以将输出重新格式 化,使得每一行显示一组“变量=值”。替换可以使用tr命令来实现: $ cat /proc/12501/environ | tr '\0' '\n'

变量赋值:

变量可以通过以下方式进行赋值: var=value var是变量名,value是赋给变量的值。如果value不包含任何空白字符(例如空格),那么 它就不需要使用引号进行引用,否则必须使用单引号或双引号。 注意,var = value不同于var=value。把var=value写成var = value是一个常见的错误, 但前者是赋值操作,后者则是相等操作。

在变量名之前加上$前缀就可以打印出变量的内容: var="value" #给变量var赋值 echo $var 或者 echo ${var} 输出如下: value

 

我们可以在printf或 echo命令的双引号中引用变量值。

#!/bin/bash #文件名:variables.sh

fruit=apple count=5 echo "We have $count ${fruit}(s)"

输出如下: We have 5 apple(s)

 

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

例如环境变量 HTTP_PROXY,它定义了互联网连接应该使用哪个代理服务器。 该环境变量通常被设置成: HTTP_PROXY=192.168.1.23:3128 export HTTP_PROXY。

 

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

至此之后,从当前shell脚本执行的任何应用程序都会继承 这个变量。

我们可以按照自己的需要,在执行的应用程序或者shell脚本中导出特定的变量。在默 认情况下,有很多标准环境变量可供shell使用。

 

PATH就是其中之一。通常,变量PATH包含: $ echo $PATH /home/slynux/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr /games 在给出所要执行的命令后,shell会自动在PATH环境变量所包含的目录列表中(各目录路径之 间以冒号分隔)查找对应的可执行文件。PATH通常定义在/etc/environment或/etc/profile或~/.bashrc 中。如果需要在PATH中添加一条新路径,可以使用: 

export PATH="$PATH:/home/user/bin" 也可以使用 $ PATH="$PATH:/home/user/bin" $ export PATH $ echo $PATH /home/slynux/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr /games:/home/user/bin

这样,我们就将/home/user/bin添加到了PATH中。 还有一些众所周知的环境变量:HOME、PWD、USER、UID、SHELL等。

 

使用单引号时,变量不会被扩展(expand),将依照原样显示。

这意味着: $ echo '$var' will print $var 但如果变量var已经定义过,那么$ echo "$var"会打印出该变量的值; 如果没有定义过,则什么都不打印。

 

 

1. 获得字符串长度 可以用下面的方法获得变量值的长度: length=${#var}

2. 识别当前所使用的shell 可以用下面的方法获知当前使用的是哪种shell: echo $SHELL,也可以用 echo $0

 

环境变量通常用于存储路径列表,这些路径用于搜索可执行文件、库文件等。

例如$PATH、 $LD_LIBRARY_PATH,它们通常看起来像这样: PATH=/usr/bin;/bin LD_LIBRARY_PATH=/usr/lib;/lib 这意味着只要shell需要运行二进制可执行文件时,它会首先查找/usr/bin,然后是/bin。

当你必须使用源代码编译生成程序并将其安装到某个特定路径中时,有项极其常见的任务就 是将该程序的bin目录加入PATH环境变量。假设我们要将myapp安装到/opt/myapp,它的二进制文 件在bin目录中,库文件在lib目录中。

 

环境变量通常用于存储路径列表,这些路径用于搜索可执行文件、库文件等。

例如$PATH、 $LD_LIBRARY_PATH,它们通常看起来像这样: PATH=/usr/bin;/bin LD_LIBRARY_PATH=/usr/lib;/lib 这意味着只要shell需要运行二进制可执行文件时,它会首先查找/usr/bin,然后是/bin。

当你必须使用源代码编译生成程序并将其安装到某个特定路径中时,有项极其常见的任务就 是将该程序的bin目录加入PATH环境变量。假设我们要将myapp安装到/opt/myapp,它的二进制文 件在bin目录中,库文件在lib目录中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值