当前位置: 首页 > news >正文

郑州网站推广策如何查询网站是谁做的

郑州网站推广策,如何查询网站是谁做的,湘潭房产网站建设,微信微官网如何制作███████╗██╗ ██╗███████╗██╗ ██╗ ██╔════╝██║ ██║██╔════╝██║ ██║ ███████╗███████║█████╗ ██║ ██║ … ███████╗██╗ ██╗███████╗██╗ ██╗ ██╔════╝██║ ██║██╔════╝██║ ██║ ███████╗███████║█████╗ ██║ ██║ ╚════██║██╔══██║██╔══╝ ██║ ██║ ███████║██║ ██║███████╗███████╗███████╗ 概述 什么是 shell Shell 是一个用 C 语言编写的程序它是用户使用 Linux 的桥梁。 Shell 既是一种命令语言又是一种程序设计语言。 Shell 是指一种应用程序这个应用程序提供了一个界面用户通过这个界面访问 Linux 内核的服务。 Ken Thompson 的 sh 是第一种 Unix ShellWindows Explorer 是一个典型的图形界面 Shell。 什么是 shell 脚本 Shell 脚本shell script是一种为 shell 编写的脚本程序一般文件后缀为 .sh。 业界所说的 shell 通常都是指 shell 脚本但 shell 和 shell script 是两个不同的概念。 Shell 环境 Shell 编程跟 java、php 编程一样只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Shell 的解释器种类众多常见的有 sh - 即 Bourne Shell。sh 是 Unix 标准默认的 shell。 bash - 即 Bourne Again Shell。bash 是 Linux 标准默认的 shell。 fish - 智能和用户友好的命令行 shell。 xiki - 使 shell 控制台更友好更强大。 zsh - 功能强大的 shell 与脚本语言。指定脚本解释器 在 shell 脚本#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 解释器。#! 被称作shebang也称为 Hashbang 。 所以你应该会在 shell 中见到诸如以下的注释 指定 sh 解释器#!/bin/sh 指定 bash 解释器#!/bin/bash 注意 上面的指定解释器的方式是比较常见的但有时候你可能也会看到下面的方式 #!/usr/bin/env bash 这样做的好处是系统会自动在 PATH 环境变量中查找你指定的程序本例中的bash。相比第一种写法你应该尽量用这种写法因为程序的路径是不确定的。这样写还有一个好处操作系统的PATH变量有可能被配置为指向程序的另一个版本。比如安装完新版本的bash我们可能将其路径添加到PATH中来“隐藏”老版本。如果直接用#!/bin/bash那么系统会选择老版本的bash来执行脚本如果用#!/usr/bin/env bash则会使用新版本。 模式 shell 有交互和非交互两种模式。 交互模式 简单来说你可以将 shell 的交互模式理解为执行命令行。 看到形如下面的东西说明shell处于交互模式下 userhost:~$ 接着便可以输入一系列 Linux 命令比如 lsgrepcdmkdirrm 等等。 非交互模式 简单来说你可以将 shell 的非交互模式理解为执行 shell 脚本。 在非交互模式下shell 从文件或者管道中读取命令并执行。 当 shell 解释器执行完文件中的最后一个命令shell 进程终止并回到父进程。 可以使用下面的命令让shell以非交互模式运行 sh /path/to/script.sh bash /path/to/script.sh 上面的例子中script.sh是一个包含shell解释器可以识别并执行的命令的普通文本文件sh和bash是shell解释器程序。你可以使用任何喜欢的编辑器创建script.shvimnanoSublime Text, Atom等等。 除此之外你还可以通过chmod命令给文件添加可执行的权限来直接执行脚本文件 chmod x /path/to/script.sh #使脚本具有执行权限 /path/to/test.sh 这种方式要求脚本文件的第一行必须指明运行该脚本的程序比如 #!/bin/bash echo Hello, world! 上面的例子中我们使用了一个很有用的命令echo来输出字符串到屏幕上。 Shell 编程 由于 bash 是 Linux 标准默认的 shell可以说 bash 是 shell 编程的基础。 所以下面将全部基于 bash 来讲解 shell 编程。 此外本篇章主要介绍的是 shell 编程的语法对于 linux 指令不做任何介绍。 解释器 前面虽然两次提到了#! 但是本着重要的事情说三遍的精神这里再强调一遍 在 shell 脚本#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 解释器。#! 被称作shebang也称为 Hashbang 。 #! 决定了脚本可以像一个独立的可执行文件一样执行而不用在终端之前输入sh, bash, python, php等。 示例 # 以下两种方式都可以指定 shell 解释器为 bash第二种方式更好 #!/bin/bash #!/usr/bin/env bash 注释 shell 语法支持注释。注释是特殊的语句会被 shell 解释器忽略。它们以 # 开头到行尾结束。 示例 #!/bin/bash ### This script will print your username. whoami Tip: 用注释来说明你的脚本是干什么的以及为什么这样写。 变量 跟许多程序设计语言一样你可以在 bash 中创建变量。 Bash 中没有数据类型bash 中的变量可以保存一个数字、一个字符、一个字符串等等。同时无需提前声明变量给变量赋值会直接创建变量。 你可以创建三种变量局部变量环境变量以及作为位置参数的变量。 局部变量 局部变量是仅在某个脚本内部有效的变量。它们不能被其他的程序和脚本访问。 局部变量可以用  声明作为一种约定变量名、、变量的值之间不应该有空格其值可以用$ 访问到。 示例 usernamezhangpeng ### 声明变量 echo $username ### 输出变量的值 unset username ### 删除变量 可以用 local 关键字声明属于某个函数的局部变量。这样声明的变量会在函数结束时消失。 local local_varIm a local value 环境变量 环境变量是对当前 shell 会话内所有的程序或脚本都可见的变量。 创建它们跟创建局部变量类似但使用的是 export 关键字。 export global_varIm a global value 常见的环境变量 变量描述$HOME当前用户的用户目录$PATH用分号分隔的目录列表shell会到这些目录中查找命令$PWD当前工作目录$RANDOM0到32767之间的整数$UID数值类型当前用户的用户ID$PS1主要系统输入提示符$PS2次要系统输入提示符这里 有一张更全面的 Bash 环境变量列表。 位置参数 位置参数是在调用一个函数并传给它参数时创建的变量。 位置参数变量表 变量描述$0脚本名称$1 … $9第1个到第9个参数列表${10} … ${N}第10个到N个参数列表 $* or $ 除了$0外的所有位置参数$#不包括$0在内的位置参数的个数$FUNCNAME函数名称仅在函数内部有值示例 在下面的例子中位置参数为$0./script.sh$1foo$2bar $ ./script.sh foo bar 变量可以有默认值。我们可以用如下语法来指定默认值 ### 如果变量为空赋给他们默认值 : ${VAR:default} : ${1:first} echo \$1 : $1 : ${2:second} echo \$2 : $2### 或者 FOO${FOO:-default} Shell扩展 扩展 发生在一行命令被分成一个个的 记号tokens 之后。换言之扩展是一种执行数学运算的机制还可以用来保存命令的执行结果等等。 感兴趣的话可以阅读关于shell扩展的更多细节。 大括号扩展 大括号扩展让生成任意的字符串成为可能。它跟 文件名扩展 很类似举个例子 echo beg{i,a,u}n ### begin began begun 大括号扩展还可以用来创建一个可被循环迭代的区间。 echo {0..5} ### 0 1 2 3 4 5 echo {00..8..2} ### 00 02 04 06 08 命令置换 命令置换允许我们对一个命令求值并将其值置换到另一个命令或者变量赋值表达式中。当一个命令被或$()包围时命令置换将会执行。举个例子 nowdate %T ### or now$(date %T)echo $now ### 19:08:26 算数扩展 在bash中执行算数运算是非常方便的。算数表达式必须包在$(( ))中。算数扩展的格式为 result$(( ((10 5*3) - 7) / 2 )) echo $result ### 9 在算数表达式中使用变量无需带上$前缀 x4 y7 echo $(( x y )) ### 11 echo $(( x y )) ### 12 echo $(( x y )) ### 13 单引号和双引号 单引号和双引号之间有很重要的区别。在双引号中变量引用或者命令置换是会被展开的。在单引号中是不会的。举个例子 echo Your home: $HOME ### Your home: /Users/username echo Your home: $HOME ### Your home: $HOME 当局部变量和环境变量包含空格时它们在引号中的扩展要格外注意。随便举个例子假如我们用echo来输出用户的输入 INPUTA string with strange whitespace. echo $INPUT ### A string with strange whitespace. echo $INPUT ### A string with strange whitespace. 调用第一个echo时给了它5个单独的参数 —— $INPUT 被分成了单独的词echo在每个词之间打印了一个空格。第二种情况调用echo时只给了它一个参数整个$INPUT的值包括其中的空格。 来看一个更严肃的例子 FILEFavorite Things.txt cat $FILE ### 尝试输出两个文件: Favorite 和 Things.txt cat $FILE ### 输出一个文件: Favorite Things.txt 尽管这个问题可以通过把FILE重命名成Favorite-Things.txt来解决但是假如这个值来自某个环境变量来自一个位置参数或者来自其它命令find, cat, 等等呢。因此如果输入 可能 包含空格务必要用引号把表达式包起来。 数组 跟其它程序设计语言一样bash中的数组变量给了你引用多个值的能力。在bash中数组下标也是从0开始也就是说第一个元素的下标是0。 跟数组打交道时要注意一个特殊的环境变量IFS。IFS全称 Input Field Separator保存了数组中元素的分隔符。它的默认值是一个空格IFS 。 创建数组 在 bash 中有好几种方法创建一个数组 array[0] val array[1] val array[2] val array([2]val [0]val [1]val) array(val val val) 获取数组元素 获取数组的单个元素echo ${array[1]} 获取数组的所有元素echo ${array[*]} echo ${array[]} 上面两行有很重要也很微妙的区别假设某数组元素中包含空格 colors[0]Red colors[1]Dark Green colors[2]Blue 为了将数组中每个元素单独一行输出我们用内建的printf命令 printf %s\n ${colors[*]}# 输出 # Red # Dark # Green # Blue 为什么Desert和fig各占了一行尝试用引号包起来 printf %s\n ${colors[*]}# 输出 # Red Dark Green Blue 现在所有的元素都跑去了一行 —— 这不是我们想要的为了解决这个痛点${colors[]}闪亮登场 printf %s\n ${colors[]}# 输出RedDark GreenBlue 在引号内${colors[]}将数组中的每个元素扩展为一个单独的参数数组元素中的空格得以保留。 访问数组的部分元素echo ${array[]:0:2} 在上面的例子中${array[]} 扩展为整个数组:0:2取出了数组中从0开始长度为2的元素。 获取数组长度 echo ${#array[*]} 向数组中添加元素 向数组中添加元素也非常简单 colors(Yellow ${colors[]} Pink Black) echo ${colors[]}# 输出 # Yellow Red Dark Green Blue Pink Black 上面的例子中${colors[]} 扩展为整个数组并被置换到复合赋值语句中接着对数组colors的赋值覆盖了它原来的值。 从数组中删除元素 用unset命令来从数组中删除一个元素 unset colors[0] echo ${colors[]}# 输出 # Red Dark Green Blue Pink Black 运算符 算术运算符 下表列出了常用的算术运算符假定变量 a 为 10变量 b 为 20 运算符说明举例加法 expr $a $b 结果为 30。-减法 expr $a - $b 结果为 -10。*乘法 expr $a \* $b 结果为 200。/除法 expr $b / $a 结果为 2。%取余 expr $b % $a 结果为 0。赋值 a$b 将把变量 b 的值赋给 a。相等。用于比较两个数字相同则返回 true。 [ $a $b ] 返回 false。!不相等。用于比较两个数字不相同则返回 true。 [ $a ! $b ] 返回 true。注意条件表达式要放在方括号之间并且要有空格例如: [aab] 是错误的必须写成 [ aab ]。 示例 a10 b20echo a$a, b$bvalexpr $a $b echo a b : $valvalexpr $a - $b echo a - b : $valvalexpr $a \* $b echo a * b : $valvalexpr $b / $a echo b / a : $valvalexpr $b % $a echo b % a : $valif [ $a $b ] thenecho a 等于 b fi if [ $a ! $b ] thenecho a 不等于 b fi 关系运算符 关系运算符只支持数字不支持字符串除非字符串的值是数字。 下表列出了常用的关系运算符假定变量 a 为 10变量 b 为 20 运算符说明举例-eq检测两个数是否相等相等返回 true。 [ $a -eq $b ]返回 false。-ne检测两个数是否相等不相等返回 true。 [ $a -ne $b ] 返回 true。-gt检测左边的数是否大于右边的如果是则返回 true。 [ $a -gt $b ] 返回 false。-lt检测左边的数是否小于右边的如果是则返回 true。 [ $a -lt $b ] 返回 true。-ge检测左边的数是否大于等于右边的如果是则返回 true。 [ $a -ge $b ] 返回 false。-le检测左边的数是否小于等于右边的如果是则返回 true。 [ $a -le $b ]返回 true。示例 a10 b20if [ $a -eq $b ] thenecho $a -eq $b : a 等于 b elseecho $a -eq $b: a 不等于 b fi if [ $a -ne $b ] thenecho $a -ne $b: a 不等于 b elseecho $a -ne $b : a 等于 b fi if [ $a -gt $b ] thenecho $a -gt $b: a 大于 b elseecho $a -gt $b: a 不大于 b fi if [ $a -lt $b ] thenecho $a -lt $b: a 小于 b elseecho $a -lt $b: a 不小于 b fi if [ $a -ge $b ] thenecho $a -ge $b: a 大于或等于 b elseecho $a -ge $b: a 小于 b fi if [ $a -le $b ] thenecho $a -le $b: a 小于或等于 b elseecho $a -le $b: a 大于 b fi 布尔运算符 下表列出了常用的布尔运算符假定变量 a 为 10变量 b 为 20 运算符说明举例!非运算表达式为 true 则返回 false否则返回 true。 [ ! false ] 返回 true。-o或运算有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。-a与运算两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。示例 a10 b20echo a$a, b$bif [ $a ! $b ] thenecho $a ! $b : a 不等于 b elseecho $a ! $b: a 等于 b fi if [ $a -lt 100 -a $b -gt 15 ] thenecho $a 小于 100 且 $b 大于 15 : 返回 true elseecho $a 小于 100 且 $b 大于 15 : 返回 false fi if [ $a -lt 100 -o $b -gt 100 ] thenecho $a 小于 100 或 $b 大于 100 : 返回 true elseecho $a 小于 100 或 $b 大于 100 : 返回 false fi if [ $a -lt 5 -o $b -gt 100 ] thenecho $a 小于 5 或 $b 大于 100 : 返回 true elseecho $a 小于 5 或 $b 大于 100 : 返回 false fi 逻辑运算符 以下介绍 Shell 的逻辑运算符假定变量 a 为 10变量 b 为 20: 运算符说明举例逻辑的 AND [[ $a -lt 100 $b -gt 100 ]] 返回 false||逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true示例 a10 b20echo a$a, b$bif [[ $a -lt 100 $b -gt 100 ]] thenecho 返回 true elseecho 返回 false fiif [[ $a -lt 100 || $b -gt 100 ]] thenecho 返回 true elseecho 返回 false fi 字符串运算符 下表列出了常用的字符串运算符假定变量 a 为 abc变量 b 为 efg 运算符说明举例检测两个字符串是否相等相等返回 true。 [ $a $b ] 返回 false。!检测两个字符串是否相等不相等返回 true。 [ $a ! $b ] 返回 true。-z检测字符串长度是否为0为0返回 true。 [ -z $a ] 返回 false。-n检测字符串长度是否为0不为0返回 true。 [ -n $a ] 返回 true。str检测字符串是否为空不为空返回 true。 [ $a ] 返回 true。示例 aabc befgecho a$a, b$bif [ $a $b ] thenecho $a $b : a 等于 b elseecho $a $b: a 不等于 b fi if [ $a ! $b ] thenecho $a ! $b : a 不等于 b elseecho $a ! $b: a 等于 b fi if [ -z $a ] thenecho -z $a : 字符串长度为 0 elseecho -z $a : 字符串长度不为 0 fi if [ -n $a ] thenecho -n $a : 字符串长度不为 0 elseecho -n $a : 字符串长度为 0 fi if [ $a ] thenecho $a : 字符串不为空 elseecho $a : 字符串为空 fi 文件测试运算符 文件测试运算符用于检测 Unix 文件的各种属性。 属性检测描述如下 操作符说明举例-b file检测文件是否是块设备文件如果是则返回 true。 [ -b $file ] 返回 false。-c file检测文件是否是字符设备文件如果是则返回 true。 [ -c $file ] 返回 false。-d file检测文件是否是目录如果是则返回 true。 [ -d $file ] 返回 false。-f file检测文件是否是普通文件既不是目录也不是设备文件如果是则返回 true。 [ -f $file ] 返回 true。-g file检测文件是否设置了 SGID 位如果是则返回 true。 [ -g $file ] 返回 false。-k file检测文件是否设置了粘着位(Sticky Bit)如果是则返回 true。 [ -k $file ]返回 false。-p file检测文件是否是有名管道如果是则返回 true。 [ -p $file ] 返回 false。-u file检测文件是否设置了 SUID 位如果是则返回 true。 [ -u $file ] 返回 false。-r file检测文件是否可读如果是则返回 true。 [ -r $file ] 返回 true。-w file检测文件是否可写如果是则返回 true。 [ -w $file ] 返回 true。-x file检测文件是否可执行如果是则返回 true。 [ -x $file ] 返回 true。-s file检测文件是否为空文件大小是否大于0不为空返回 true。 [ -s $file ] 返回 true。-e file检测文件包括目录是否存在如果是则返回 true。 [ -e $file ] 返回 true。示例 变量 file 表示文件/var/www/runoob/test.sh它的大小为100字节具有 rwx 权限。下面的代码将检测该文件的各种属性 file./operatorDemo.sh if [ -r $file ] thenecho 文件可读 elseecho 文件不可读 fi if [ -w $file ] thenecho 文件可写 elseecho 文件不可写 fi if [ -x $file ] thenecho 文件可执行 elseecho 文件不可执行 fi if [ -f $file ] thenecho 文件为普通文件 elseecho 文件为特殊文件 fi if [ -d $file ] thenecho 文件是个目录 elseecho 文件不是个目录 fi if [ -s $file ] thenecho 文件不为空 elseecho 文件为空 fi if [ -e $file ] thenecho 文件存在 elseecho 文件不存在 fi 语句 条件语句 跟其它程序设计语言一样Bash中的条件语句让我们可以决定一个操作是否被执行。结果取决于一个包在[[ ]]里的表达式。 条件表达式可以包含和||运算符分别对应 与 和 或 。除此之外还有很多有用的表达式。 共有两个不同的条件表达式if和case。 基元和组合表达式 由[[ ]]sh中是[ ]包起来的表达式被称作 检测命令 或 基元。这些表达式帮助我们检测一个条件的结果。在下面的表里为了兼容sh我们用的是[ ]。这里可以找到有关bash中单双中括号区别的答案。 使用if if在使用上跟其它语言相同。如果中括号里的表达式为真那么then和fi之间的代码会被执行。fi标志着条件代码块的结束。 ### 写成一行 if [[ 1 -eq 1 ]]; then echo true; fi### 写成多行 if [[ 1 -eq 1 ]]; thenecho true fi 同样我们可以使用if..else语句例如 ### 写成一行 if [[ 2 -ne 1 ]]; then echo true; else echo false; fi### 写成多行 if [[ 2 -ne 1 ]]; thenecho true elseecho false fi 有些时候if..else不能满足我们的要求。别忘了if..elif..else使用起来也很方便。 示例 if [[ uname Adam ]]; thenecho Do not eat an apple! elif [[ uname Eva ]]; thenecho Do not take an apple! elseecho Apples are delicious! fi 使用case 如果你需要面对很多情况分别要采取不同的措施那么使用case会比嵌套的if更有用。使用case来解决复杂的条件判断看起来像下面这样 echo input param: $1case $1 injpg | jpeg)echo Its image with jpeg extension.;;png)echo Its image with png extension.;;gif)echo Oh, its a giphy!;;*)echo Woops! Its not image!;; esac 每种情况都是匹配了某个模式的表达式。|用来分割多个模式)用来结束一个模式序列。第一个匹配上的模式对应的命令将会被执行。*代表任何不匹配以上给定模式的模式。命令块儿之间要用;;分隔。 循环语句 循环其实不足为奇。跟其它程序设计语言一样bash中的循环也是只要控制条件为真就一直迭代执行的代码块。 Bash中有四种循环forwhileuntil和select。 for循环 for与它在C语言中的姊妹非常像。看起来是这样 for arg in elem1 elem2 ... elemN do### 语句 done 在每次循环的过程中arg依次被赋值为从elem1到elemN。这些值还可以是通配符或者大括号扩展。 当然我们还可以把for循环写在一行但这要求do之前要有一个分号就像下面这样 for i in {1..5}; do echo $i; done 还有如果你觉得for..in..do对你来说有点奇怪那么你也可以像C语言那样使用for比如 for (( i 0; i 10; i )); doecho $i done 当我们想对一个目录下的所有文件做同样的操作时for就很方便了。举个例子如果我们想把所有的.bash文件移动到script文件夹中并给它们可执行权限我们的脚本可以这样写 #!/bin/bashfor FILE in $HOME/*.bash; domv $FILE ${HOME}/scriptschmod x ${HOME}/scripts/${FILE} done while循环 while循环检测一个条件只要这个条件为 真就执行一段命令。被检测的条件跟if..then中使用的基元并无二异。因此一个while循环看起来会是这样 while [[ condition ]] do### 语句 done 跟for循环一样如果我们把do和被检测的条件写到一行那么必须要在do之前加一个分号。 比如下面这个例子 #!/bin/bash### 0到9之间每个数的平方 x0 while [[ $x -lt 10 ]]; do ### x小于10echo $(( x * x ))x$(( x 1 )) ### x加1 done until循环 until循环跟while循环正好相反。它跟while一样也需要检测一个测试条件但不同的是只要该条件为 假 就一直执行循环 until [[ condition ]]; do### 语句 done select循环 select循环帮助我们组织一个用户菜单。它的语法几乎跟for循环一致 select answer in elem1 elem2 ... elemN do### 语句 done select会打印elem1..elemN以及它们的序列号到屏幕上之后会提示用户输入。通常看到的是$?PS3变量。用户的选择结果会被保存到answer中。如果answer是一个在1..N之间的数字那么语句会被执行紧接着会进行下一次迭代 —— 如果不想这样的话我们可以使用break语句。 一个可能的实例可能会是这样 #!/bin/bashPS3Choose the package manager: select ITEM in bower npm gem pip doecho -n Enter the package name: read PACKAGEcase $ITEM inbower) bower install $PACKAGE ;;npm) npm install $PACKAGE ;;gem) gem install $PACKAGE ;;pip) pip install $PACKAGE ;;esacbreak ### 避免无限循环 done 这个例子先询问用户他想使用什么包管理器。接着又询问了想安装什么包最后执行安装操作。 运行这个脚本会得到如下输出 $ ./my_script 1) bower 2) npm 3) gem 4) pip Choose the package manager: 2 Enter the package name: bash-handbook installing bash-handbook break 和 continue 如果想提前结束一个循环或跳过某次循环执行可以使用 shell 的break和continue语句来实现。它们可以在任何循环中使用。 break语句用来提前结束当前循环。 continue语句用来跳过某次迭代。 for (( i 0; i 10; i )); doif [[ $(( i % 2 )) -eq 0 ]]; then continue; fiecho $i done 运行上面的例子会打印出所有0到9之间的奇数。 函数 在脚本中我们可以定义并调用函数。跟其它程序设计语言类似函数是一个代码块但有所不同。 bash 中函数是一个命令序列这个命令序列组织在某个名字下面即 函数名 。调用函数跟其它语言一样写下函数名字函数就会被 调用。 我们可以这样声明函数 my_func () {### 语句 }my_func ### 调用 my_func 我们必须在调用前声明函数。 函数可以接收参数并返回结果 —— 返回值。参数在函数内部跟非交互式下的脚本参数处理方式相同 —— 使用位置参数。返回值可以使用return命令 返回 。 下面这个函数接收一个名字参数返回0表示成功执行。 ### 带参数的函数 greeting () {if [[ -n $1 ]]; thenecho Hello, $1!elseecho Hello, unknown!fireturn 0 }greeting Denys ### Hello, Denys! greeting ### Hello, stranger! 我们之前已经介绍过返回值。不带任何参数的return会返回最后一个执行的命令的返回值。上面的例子return 0会返回一个成功表示执行的值0。 另外还有几个特殊字符用来处理参数 参数处理说明$#传递到脚本的参数个数$*以一个单字符串显示所有向脚本传递的参数$$脚本运行的当前进程ID号$!后台运行的最后一个进程的ID号$与$*相同但是使用时加引号并在引号中返回每个参数。$-显示Shell使用的当前选项与set命令功能相同。$?显示最后命令的退出状态。0表示没有错误其他任何值表明有错误。流和重定向 Bash有很强大的工具来处理程序之间的协同工作。使用流我们能将一个程序的输出发送到另一个程序或文件因此我们能方便地记录日志或做一些其它我们想做的事。 管道给了我们创建传送带的机会控制程序的执行成为可能。 学习如何使用这些强大的、高级的工具是非常非常重要的。 输入、输出流 Bash接收输入并以字符序列或 字符流 的形式产生输出。这些流能被重定向到文件或另一个流中。 有三个文件描述符 代码描述符描述0stdin标准输入1stdout标准输出2stderr标准错误输出重定向 重定向让我们可以控制一个命令的输入来自哪里输出结果到什么地方。这些运算符在控制流的重定向时会被用到 OperatorDescription重定向输出重定向输出和错误输出以附加的形式重定向输出和错误输出重定向输入 Here文档 语法Here字符串以下是一些使用重定向的例子 ### ls的结果将会被写到list.txt中 ls -l list.txt### 将输出附加到list.txt中 ls -a list.txt### 所有的错误信息会被写到errors.txt中 grep da * 2 errors.txt### 从errors.txt中读取输入 less errors.txt /dev/null 文件 如果希望执行某个命令但又不希望在屏幕上显示输出结果那么可以将输出重定向到 /dev/null $ command /dev/null /dev/null 是一个特殊的文件写入到它的内容都会被丢弃如果尝试从该文件读取内容那么什么也读不到。但是 /dev/null 文件非常有用将命令的输出重定向到它会起到禁止输出的效果。 如果希望屏蔽 stdout 和 stderr可以这样写 $ command /dev/null 21 Debugging shell提供了用于debugging脚本的工具。如果我们想以debug模式运行某脚本可以在其shebang中使用一个特殊的选项 #!/bin/bash options options是一些可以改变shell行为的选项。下表是一些可能对你有用的选项 ShortNameDescription-fnoglob禁止文件名展开globbing-iinteractive让脚本以 交互 模式运行-nnoexec读取命令但不执行语法检查-t—执行完第一条命令后退出-vverbose在执行每条命令前向stderr输出该命令-xxtrace在执行每条命令前向stderr输出该命令以及该命令的扩展参数举个例子如果我们在脚本中指定了-x例如 #!/bin/bash -xfor (( i 0; i 3; i )); doecho $i done 这会向stdout打印出变量的值和一些其它有用的信息 $ ./my_script(( i 0 ))(( i 3 ))echo 0 0(( i ))(( i 3 ))echo 1 1(( i ))(( i 3 ))echo 2 2(( i ))(( i 3 )) 有时我们需要debug脚本的一部分。这种情况下使用set命令会很方便。这个命令可以启用或禁用选项。使用-启用选项禁用选项 #!/bin/bashecho xtrace is turned off set -x echo xtrace is enabled set x echo xtrace is turned off again 本文转自静默虚空博客园博客原文链接http://www.cnblogs.com/jingmoxukong/p/7867397.html如需转载请自行联系原作者
http://www.zqtcl.cn/news/736780/

相关文章:

  • 网页模板网站推荐青岛 php 网站建设
  • joomla 网站建设3d网站建设
  • 网站开发与维护专业前景网站被禁止访问怎么打开
  • 山东 网站建设青海公路建设市场信用信息服务网站
  • 济南正规做网站公司wordpress一键还原
  • 免费的购物网站源码百度网站优化
  • 企业需要做网站吗深圳装修公司前十强
  • 合肥做网站推广哪家好软文写作的十大技巧
  • 哪里做网站的wordpress歌词插件
  • 网站改版做301重定向百度站长平台查询
  • 织梦网站后台网址妙影免费模板下载
  • 甘肃网站建设开发怎么利用花生壳做自己的网站
  • 怎么查询网站开通时间建个短视频网站
  • 物流网站建设广东网站建设效果
  • 网站推广工作流程图天蝎网站建设
  • 备案ip 查询网站查询网站校园门户网站建设方案
  • 网站seo快速优化技巧建设网站的需要学习哪些课程
  • 网站建设微信托管wordpress p=
  • 专业手机网站制作哪家好吉林建筑大学本科招生网
  • 建立一个网站需要哪些google和百度等相关网站的广告词
  • 手机开发网站教程做古建的那些网站比较适合
  • 网站建设公司的前景长沙商城网站开发
  • 大型网站tag标签 索引自己做网站需要哪些软件
  • 石排做网站万网网站备案流程
  • 南京建设银行网站首页简单的ui界面制作
  • 门户网站 建设 如何写如何布置网站
  • 网站前台功能模块介绍建设银行信用卡网站是哪个好
  • 用python做网站我那些网站开发开发语言
  • 建设网站怎样做安卓app软件公司
  • 重庆seo整站优化效果上海城建建设官方网站