互动网站建设多少钱,cms网站栏目介绍,泰安手机网站建设电话,网站内建设的发展1、在终端中显示输出
shell脚本通常以shebang起始#xff1a;##xff01;/bin/bash/
shebang是一个文本行#xff0c;其中#!位于解释器路径之前。/bin/bash是Bash的解释器命令路径。bash将以#符号开头的行视为注释。脚本中只有第一行可以使用shebang来定义解释该脚本所使…1、在终端中显示输出
shell脚本通常以shebang起始#/bin/bash/
shebang是一个文本行其中#!位于解释器路径之前。/bin/bash是Bash的解释器命令路径。bash将以#符号开头的行视为注释。脚本中只有第一行可以使用shebang来定义解释该脚本所使用的解释器。
脚本的执行方式有两种
第一种将脚本名作为命令行参数bash myScript.sh如果将脚本作为bash的命令行参数来运行那么就用不着使用shebang了。第二种授予脚本执行权限将其变为可执行文件。可以利用shebang来实现脚本的独立运行。可执行脚本使用shebang之后的解释器路径来解释脚本。
# 赋予脚本可执行权限
chmod 755 myScript.sh
chmod ax myScript.sh# 执行脚本
./myScript.sh # ./表示当前目录
/home/path/myScript.sh # 使用脚本的完整路径# 内核会读取脚本的首行并注意到shebang为#!/bin/bash。它会识别出/bin/bash并执行该脚本/bin/bash myScript.sh
当启动一个交互式shell时它会执行一组命令来初始化提示文本、颜色等设置。这组命令来自用户主目录中的脚本文件~/.bashrc对于登录shell则是~/.bash_profile。Bash shell还维护了一个历史记录文件~/.bash_history用于保存用户运行过的命令。
注意登录shell是登录主机后创建的那个shell。但登录图形化环境比如GNOME、KDE等后所创建的终端会话并不是登录shell。使用GNOME或KDE这类显示管理器登录后并不会读取.profile或.bash_profile绝大部分情况下不会而使用ssh登录远程系统时则会读取.profile。shell使用分号或换行符来分隔单个命令或命令序列。
a. echo 命令
描述echo是用于终端打印的最基本命令。默认情况下echo在每次调用后会添加一个换行符。语法echo [选项] 内容 -e 包含转义序列的字符串-n 禁止在文本的尾部追加一个换行符
echo Welcome to bash
echo Welcome to bash
echo Weclome to bash# 如果不使用引号我们无法在echo中使用分号因为分号在Bash shell中用作命令间的分隔符
echo hello;echo xixi
hello
xixi
这些方法看起来相似但各有特定的用途及副作用。双引号允许shell解释字符串中出现的特殊字符。单引号不会对其做任何解释。
转义字符
默认情况下echo会在输出文本的尾部追加一个换行符。可以使用选项-n来禁止这种行为。echo同样接受双包含转义序列的双引号字符串作为参数。在使用转义序列时需要使用echo -e 包含转义序列的字符串这种形式。
echo -e 1\t2\t3 # 输出1 2 3 而不是 1\t2\t3
echo -n haha # 输出时文本尾部没有换行
打印彩色输出
脚本可以使用转义序列在终端中生成彩色文本
文本颜色是由对应的色彩码来描述的。其中包括重置0黑色30红色31绿色32黄色33蓝色34洋红35青色36白色37。对于彩色背景经常使用的颜色码是重置0黑色40红色41绿色42黄色43蓝色44洋红45青色46白色47。
# 打印彩色文本
echo -e \e[1;31m This is red text \e[0m # 以红色字体打印 This is red text# 设置彩色背景
echo -e \e[1;42m Green Background \e[0m # 将 Green Bachground 的文本背景设置为绿色
其中\e[1;31m是一个转义字符串可以将颜色设为红色\e[0m将颜色重新置回。这些例子中包含了一些转义序列。可以使用man console_codes来查看相关文档。
b. prinf 命令
printf命令接受引用文本或由空格分隔的参数。默认情况下printf并不会自动添加换行符需手动指定。
可以在printf中使用格式化字符串来指定字符串的宽度、左右对齐方式等。
描述用于终端打印语法printf 内容
#!/bin/bashprintf %-5s %-10s %-4s\n No Name Mark
printf %-5s %-10s %-4.2f\n 1 Sarath 80.3456
printf %-5s %-10s %-4.2f\n 2 James 90.9989
printf %-5s %-10s %-4.2f\n 3 Jeff 77.564 %s、%c、%d和%f都是格式替换符format substitution character它们定义了该如何打印后续参数。 %-5s指明了一个格式为左对齐且宽度为5的字符串替换-表示左对齐。如果不指明-字符串就采用右对齐形式。宽度指定了保留给某个字符串的字符数量。对Name而言其保留宽度是10。因此任何Name字段的内容都会被显示在10字符宽的保留区域内如果内容不足10个字符余下的则以空格填充。
对于%f可以使用其他参数对小数部分进行舍入round off。对于Mark字段我们将其格式化为%-4.2f其中.2指定保留两位小数。注意在每行的格式字符串后都有一个换行符\n。
2、使用变量和环境变量
所有的编程语言都利用变量来存放数据以备随后使用或修改。和编译型语言不同大多数脚本语言不要求在创建变量之前声明其类型。用到什么类型就是什么类型。在变量名前面加上一个美元符号就可以访问到变量的值。shell定义了一些变量用于保存用到的配置信息比如可用的打印机、搜索路径等。这些变量叫作环境变量。
变量名由一系列字母、数字和下划线组成其中不包含空白字符。常用的惯例是在脚本中使用大写字母命名环境变量使用驼峰命名法或小写字母命名其他变量。
a. env | printenv 命令
描述查看当前shell中所定义的全部环境变量。语法env | printenv
b. pgrep 命令
描述查看相关进程的进程ID语法pgrep 进程名称
# 假设有一个叫作gedit的应用程序正在运行。我们可以使用pgrep命令获得gedit的进程ID
pgrep gedit# 假设查到的 gedit 的进程ID为 12501那么可以通过如下命令查看与该进程相关的环境变量
cat /proc/12501/environ# 要想生成一份易读的报表可以将cat命令的输出通过管道传给tr将其中的\0替换成\n
cat /proc/12501/environ | tr \0 \n
特殊文件/proc/PID/environ是一个包含环境变量以及对应变量值的列表。每一个变量以namevalue的形式来描述彼此之间由null字符\0分隔。
c. 变量赋值
使用等号操作符为变量赋值varNamevalue
如果value不包含任何空白字符例如空格那么就不需要将其放入引号中否则必须使用单引号或双引号。注意var value不同于 varvalue。把varvalue写成var value是一个常见的错误。两边没有空格的等号是赋值操作符加上空格的等号表示的是等量关系测试。
在变量名之前加上美元符号$就可以访问变量的内容。可以在printf、echo或其他命令的双引号中引用变量值
#!/bin/bashfruitapple
count5
echo We have $count ${fruit}(s)
---------------------------------------------------
d. 环境变量
环境变量是从父进程中继承而来的变量。例如环境变量HTTP_PROXY它定义了Internet连接应该使用哪个代理服务器。该环境变量通常被设置成
HTTP_PROXY192.168.1.23:3128
export HTTP_PROX
export命令声明了将由子进程所继承的一个或多个变量。这些变量被导出后当前shell脚本所执行的任何应用程序都会获得这个变量。shell创建并用到了很多标准环境变量我们也可以导出自己的环境变量。
PATH变量列出了一系列可供shell搜索特定应用程序的目录
echo $PATH- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
各目录路径之间以分隔。$PATH通常定义在/etc/environment、/etc/profile或~/.bashrc中。
cat /etc/profile 如果需要在PATH中添加一条新路径可以使用如下命令
export PATH$PATH:/home/user/bin # 在环境变量中添加新的路径
echo $PATH- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/usr/bin
另外还有一些众所周知的环境变量HOME、PWD、USER、UID、SHELL等。
注意使用单引号时变量不会被扩展仍依照原样显示。使用双引号会显示出该变量的值
echo $PATH- $PATHecho $PATH- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/usr/bin: No such file or directory
------------------------------
e. 获取变量值的长度
$ var12345678901234567890
$ echo ${#var}
20
f. 识别当前使用的Shell
echo $SHELL
echo $0
3、使用函数添加环境变量
环境变量通常保存了可用于搜索可执行文件、库文件等的路径列表如$PATH。
PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
这意味着只要shell执行应用程序二进制文件或脚本时它就会首先查找/usr/local/sbin然后查找usr/local/bin 依次查找。
使用源代码构建并安装程序时通常需要为新的可执行文件和库文件添加特定的路径。假设我们要将myapp安装到/opt/myapp它的二进制文件在/opt/myapp/bin目录中库文件在/opt/myapp /lib目录中。
将新路径添加到环境变量起始部分
export PATH/opt/myapp/bin:$PATH 使用函数添加环境变量案例没做出来
我们可以在.bashrc文件中定义如下函数简化路径添加操作
prepend() { [ -d $2 ] eval $1\$2:\$$1\ export $1; }
该函数用法如下
prepend PATH /opt/myapp/bin
函数prepend()首先确认该函数第二个参数所指定的目录是否存在。如果存在eval表达式将第一个参数所指定的变量值设置成第二个参数的值加上:路径分隔符随后再跟上第一个参数的原始值。
在进行添加时如果变量为空则会在末尾留下一个:。要解决这个问题可以对该函数再做一些修改
prepend() { [ -d $2 ] eval $1\$2\$\{$1::\$$1\}\ export $1 ; }
在这个函数中我们引入了一种shell参数扩展的形式${parameter:expression}如果parameter有值且不为空则使用expression的值。通过这次修改在向环境变量中添加新路径时当且仅当旧值存在才会增加。
-----------------------------------