大家好,又见面了,我是你们的朋友全栈君。 ---- 编写shell脚本的时候,最前面要加上一行:#!...一.shell变量 shell变量和一些编程语言不同,一般shell的变量赋值的时候不用带“”,而使用或者输出的时候要带“”。加减乘除的时候要加两层小括号。...a+b的值 echo "a-b = "${e} #输出a-b的值 echo "a*b = "${f} #输出a*b的值 echo "a/b = "${g} #输出a/b的值...echo "a%b = "${h} #输出a%b的值 echo "a^3 = "${i} #输出a的3次方的值 echo "a+b = "$((a+b)) #输出a+b的值 echo.../bin/bash str="a b c d e f g h i j" echo "the source string is "${str} #源字符串
作为一名 Bash 脚本编写经验超过 10 年的老程序员,我通常不用 Bash 处理复杂的编程任务。...一般常用的 Bash 变量都是字符串,我很少见到有数组的。另外,虽然解释器也接受小写,但 Bash 中默认是将变量名全部大写的。 2....,是这样的: for i in `seq 1 10`; do echo $i; done 这里我想强调的是,通过反引号(即键盘上Tab键上方的按键,注意不是单引号)将 seq 命令的输出结果,嵌入了 for...当然,如果变量值不包括空格,那不带引号也能得到同样的结果,但毕竟带上双引号会让程序更可靠。 8....此外还可以通过 set -o 显示所有可以设置的选项。 这也是为什么许多 shell 脚本都以 set -eu 或者 set -eux 等做为开头的原因,因为这样就可以让脚本运行在更安全的环境下。
一般常用的 Bash 变量都是字符串,我很少见到有数组的。另外,虽然解释器也接受小写,但 Bash 中默认是将变量名全部大写的。 █ 2....,是这样的: for i in `seq 1 10`; do echo $i; done 这里我想强调的是,通过反引号(即键盘上Tab键上方的按键,注意不是单引号)将 seq 命令的输出结果,嵌入了 for...当然,如果变量值不包括空格,那不带引号也能得到同样的结果,但毕竟带上双引号会让程序更可靠。 █ 8....例如下面的代码: python non_existant_file.py echo "done" 无论 non_existant_file.py 脚本是否存在,Bash 都会打印输出 done。...此外还可以通过 set -o 显示所有可以设置的选项。 这也是为什么许多 shell 脚本都以 set -eu 或者 set -eux 等做为开头的原因,因为这样就可以让脚本运行在更安全的环境下。
其中字符串string内反斜线转义的字符有特殊含义,遵循ANSI C标准,部分解释见这里 例子: [root@centos7 ~]# echo $'\u4f60\u597d\uff0c\u4e16\u754c...11:22:33" echo -e "$aa $bb $IFS $cc" 执行结果: [root@centos7 ~]# ....exec 5/dev/tcp/$host/$port then exit 1 fi #测试链接可用性 echo -e "GET / http1.1\n" >&5 #获取输出 cat <&5.../test.sh #我是文件file的内容 <!DOCTYPE html... #余下部分是http响应信息 ....../bin/bash #简单命令 #简单命令使用不能通过NAME指定协进程的名字 #此时进程的名字统一为:COPROC。
大家好,我是张晋涛。 提到 Shell 大家想必不会太陌生,我们通常认为 Shell 是我们和系统交互的接口,执行命令返回输出,比如 bash 、zsh 等。.../bin/bash set -e -u i=0 while [ $i -lt 6 ]; do echo $i ((i++)) done 答案是只会输出一个 0 。 #!.../bin/bash set -e -u let i=0 while [ $i -lt 6 ]; do echo $i ((i++)) done 答案是没有任何输出,直接退出。...如果你能解释清楚上面两段代码输出结果的话, 那大概你可以跳过这篇文章后续的内容了。 我先来分解下这段代码中涉及到的主要知识点。 变量声明 变量声明有很多种办法, 但是其行为却各有不同。...为什么呢?主要是由于在脚本顶部增加的 set -e 选项。 该选项在遇到首个 非0 值的时候会直接退出。
变量以字母或下划线开头,后面紧跟着变量名即可定义一个变量。...例如: echo "My name is $name and I am $age years old." # 输出变量name和age的值 echo "I like ${array[0]} and ${...array[1]}." # 输出数组元素的第一个和第二个值 age=30 # 将整型变量age的值更新为30 echo "I am now $age years old." # 输出变量age的新值为30...例如: # 定义一个二维数组 arr1=(a b c) arr2=(d e f) arr3=(g h i) arr=(arr1 arr2 arr3) # 访问二维数组的元素 echo ${!...arr[0][1]} # 输出b echo ${!arr[1][2]} # 输出f echo ${!
我写下来只是作为笔记,如果侵权,请留言,立马删除。 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有: bash:是Linux标准默认的shell。...Shell中的替换 转义符: 在echo中可以用于的转义符有: image 使用 echo 命令的 –E 选项禁止转义,默认也是不转义的; 使用 –n 选项可以禁止插入换行符; 使用 echo...另外,注意,经过我的实验,得到: echo "\\" #得到 \ echo -e "\\" #得到 \ echo "\\\\" #得到 \\ echo -e "\\..." #得到 \ 命令替换: 它的意思就是说我们把一个命令的输出赋值给一个变量,方法为把命令用反引号(在Esc下方)引起来....例如: 顺序输出当前列表的数字: for loop in 1 2 3 4 5 do echo "The value is: $loop" done 显示主目录下以 .bash 开头的文件:
$ echo {a..c}{1..3} a1 a2 a3 b1 b2 b3 c1 c2 c3 变量扩展 Bash 将美元符号$开头的词元视为变量,将其扩展成变量值, $ echo $SHELL /bin...的开头, # 删除最长匹配(贪婪匹配)的部分,返回剩余部分 ${variable##pattern} 上面两种语法会删除变量字符串开头的匹配部分(将其替换为空),返回剩下的部分。...$ ((foo = 5 + 5)) $ echo $foo 10 ((...))会自动忽略内部的空格,所以下面的写法都正确,得到同样的结果。...e echo Goodbye Goodbye 上面例子中,!e表示找出操作历史之中,最近的那一条以e开头的命令并执行。Bash 会先输出那一条命令echo Goodbye,然后直接执行。 同理,!.../bin/bash # test.sh echo $foo 上面脚本输出$foo变量的值。
很明显的,第二个echo由于换行符号被取消了,接下来的shell prompt就接在输出结果同一行了…^_^ 事实上,echo除了-n options之外,常用选项还有: -e:启用反斜线控制字符的转换...例四: $ echo -ne "a\tb\tc\nd\te\bf\a" a b c d f $ 因为e字母后面是退格键(\b),因此输出结果就没有e了。...您或许发现光是一个键所产生的字符就有可能是如下这些可能:CR、IFS、NL(New Line)、FF(Form Feed)、NULL …至于什么时候会解释为什么字符,这个我就没去深挖了,或是留给读者诸君自行慢慢摸索了...echo命令行中,$被置于soft quote中,将不被关闭,因此继续处理变量替换,因此echo将A的变量值输出到荧幕,也就得到```B C```的结果。...如下是一些变量设定时常见的错误: A= B # 不能有IFS 1A=B # 不能以数字开头 $A=B # 名称不能有$ a=B # 这跟a=b是不同的(这不是错误,提醒windows的使用者要特别注意)
echo * # 输出的却不是 * ,这是为什么? 回忆下之前对通配符的使用。 “ * ”字符意味着“ 匹配文件名中的任意字符 ”。...echo "www.wm99.net" # 添加 -n 选项,2条命令,输出后不换行 ③ -e 选项输出转义字符 使用 echo -e 输出转义字符,将转义后的内容输出到屏幕上。...echo -e "123\f456" echo -e "abc\f456\f520" # "\f"转移符表示换行,但是换行后的新行的开头位置连接着上一行的行尾,第2个例子中有两个"\f"。...(1)用法格式 $变量名 示例 例如:命名为 USER 的变量包含你的用户名,为了触发参数扩展,并显示出 USER 的内容,可进行如下操作: echo $USER (2)查看可用的变量列表 想查看可用的变量列表...,如果变量名拼写错误,仍然会进行扩展,只不过结果输出的是一个空字符而已。
,默认不显示行号常用参数:-n:显示文件内容并标注行号echoecho打印内容输出的内容常用参数:1....-e:支持转义字符(\n换号,\t空格键)eg:[root@money ~]# echo -e 'I\nLove\tYou' I Love You [root@money ~]#...-v:取反过滤,输出不包含指定字符的行2. -i:过滤指定字符串不区分大小写3....-E:同时过滤多个字符串 eg:[root@money ~]# grep -E 'root|bash' /etc/passwd root:x:0:0:root:/root:/bin/bash...永久设置别名:加入全局环境变量配置文件,一般是加入到/etc/bashrc中 全局【环境变量】文件/etc/profile和/etc/bashrc 用户【环境变量】文件~/.bash_profile
$1 in -e|--extension) #如果参数是这个,脚本会将紧随其后的参数(文件扩展名)保存在变量 EXTENSION 中 EXTENSION="$2" shift...DEFAULT 设置为 YES DEFAULT=YES shift # 跳过参数 ;; -*|--*) #如果参数是以 - 或 -- 开头且未知的选项,打印错误信息并退出...+x /tmp/demo-space-separated.sh /tmp/demo-space-separated.sh -e log -s /var/log pos1 pos2 复制粘贴上述代码块的输出.../bin/bash for i in "$@"; do #循环遍历所有的命令行参数 case $i in -e=*|--extension=*) EXTENSION="${i...复制粘贴上述代码块的输出: 推荐用法: demo-equals-separated.sh -e=log -s=/var/log pos1 pos2 参考: stackoverflow question
大家好,又见面了,我是你们的朋友全栈君。 1. for 命令 1.1 for 命令的使用 bash shell 提供了 for 命令,可以创建一个遍历一系列值的循环。...使用: for i in a b c d e f do echo "The char is: $i" done ------------------------------ The char is...例如: for s in I don\'t know if "this'll" work do echo "word:$s" done 1.3 更改字段分隔符 为什么需要更改字段分隔符呢?...造成这个问题的原因是特殊的环境变量 IFS ,叫作内部字段分隔符(internal field separator)。IFS 环境变量定义了bash shell用作字段分隔符的一系列字符。...注意,有些部分并没有遵循 bash shell 标准的 for 命令: 变量赋值可以有空格 条件中的变量不以美元符开头 迭代过程的算式未用 expr 命令格式 使用 C 风格的 for 命令可以像
所以打算把我自己的 vps 分成虚拟空间给大家用。但是一般的虚拟空间安全性难以得到保证,一个空间出问题,其他的用户可能都跟着遭殃,也就是旁站攻击。...; 不能通过 ssh 登陆 (其实这也是用户能通过 ftp 连接 的必须条件。...@'%';flush privileges;\""# 输出账户信息echo "create database user:$1@'%' indentified by $pass" 3....为什么会出现这种情况呢?我大概猜想是因为容器内还有一些其他服务,当限制内存小于 256m 的时候,这些服务无法被同时启用,但是我们可以只启用 apache 啊!...,容器会修改 /app(/var/www/html 的软链接)文件夹的所有者为 www-data ,那么我们就需要在启动容器时,设置这个环境变量值为真。
全局变量,局部变量和环境变量 Bash有3种变量。我一般先想到(可能也是最常用)的是 环境变量 。...有个很酷的事情是你可以遍历另一个命令的输出。seq 1 10 将数字从1到10(每行一个)打印,这个for循环只是提取该输出并遍历它。我就经常用这种方法。...例如,您可以检查文件 /tmp/awesome.txt 是否存在,如下: If [[ -e /tmp/awesome.txt ]]; then echo "awesome" fi 这通常是有用的,但我必须每次查找语法...,你会得到不可理喻的错误消息 script.sh: line 3: [: too many arguments....由于某种原因,fg 需要一个 “job ID”(这就是 jobs 打印输出的)而不是一个 PID。 谁知道 Bash 为什么这样子呢。
特别要注意,非常容易写错 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字。...${XXX-$ABC}" #如果XXX不存在,默认值是变量ABC echo "从开头删除最短匹配=${ABC#my}" # 从开头删除 my 匹配的最短字符串 echo "从开头删除最长匹配=${ABC...echo "456" echo -e "\a处理特殊符号" #-e 处理特殊符号 -n 让echo输出结束以后,在默认不输出换行符 -e 让echo处理特殊符号,比如: 符号 作用\a 发出警告声 \...\033[0m回复到缺省设置 还可以有一些其他的动作 echo -e "\033[2J" #清除屏幕 echo -e "\033[0q" #关闭所有的键盘指示灯 echo -e "\033[1q" #...命令替换 发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。
这种对话方式可以是: 交互的方式:从键盘输入命令,通过/bin/bash的解析,可以立即得到Shell的回应 [root@clsn ~]# ls anaconda-ks.cfg...变量名只能为字母、数字或下划线,只能以字母或下划线开头。 2. 变量名的定义要有一定的规范,并且要见名知意。...[root@clsn scripts]# echo $_ echo 1.5.3 echo参数说明 参数 参数说明 -n 不要追加换行 -e 启用下列反斜杠转义的解释 -E 显式地抑制对于反斜杠转义的解释...length的子串 ${parameter#word} 从变量${parameter}开头开始删除最短匹配的word子串 ${parameter##word} 从变量${parameter}开头开始删除最长匹配的...word} 如果parameter变量值为空或未赋值,那么word字符串将被作为标准错误输出,否则输出变量的值。
[ $foo > 7 ]] 原文作者认为算术比较不应该用 [[,而是用 ((,我没弄明白是为什么。....zip 结尾的文件): var="*.zip" # var 包括一个星号,一个点号和 zip echo "$var" # 输出 *.zip echo $var # 输出所有以 .zip...例如,当变量的值包含-n 时,echo 会认为它是一个合法的选项而不是要输出的内容(当然如果你能够保证不会有-n 这种值,可以放心地使用 echo 命令)。...$i # 输出 0 看起来上面的结果应该是返回 1,但是结果却是输出 0,为什么呢?...不过这并是 *或者 @,这两种写法都不正确,它们只能得到完整的参数列表,并非单独的一个个参数。
为什么要学习和使用shell?...如果我们输入的命令过长,想要把光标移动到命令行开头时使用。 ctrl+E 把光标移动到命令行结尾。 ctrl+C 强制终止当前的命令。 ctrl+L 清屏,相当于clear命令。...# 在Shell脚本中,#开头的行代表注释。 $ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。 \ 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。.../bin/bash echo "The current process is $$" #输出当前进程的PID....age中 #年龄是隐私,所以我们用“-s”选项隐藏输入 echo -e "\n" #调整输出格式,如果不输出换行,一会的年龄输出不会换行 echo "Age is $age" read -n 1 -t
Shell是解释执行的脚本语言,在Shell中可以直接调用Linux命令 echo 输出命令 -e:表示激活转义字符 echo hello echo -e "a\tb" 复制代码...按照$PATH环境变量定义的目录查找顺序执行找到的第一命令 通过unalias [命令快捷方式]可以删除命令别名 命令的生效顺序 按照以下顺序进行匹配命令 绝对路径或者相对路径 别名 bash内部命令...按照$PATH环境变量定义的目录查找顺序进行命令查找 命令快捷键 命令 含义 ctrl+c 强制终止当前命令 ctrl+l 清屏 ctrl+a 光标移动到命令行首 ctrl+e 光标移动到命令行尾 ctrl...字符重复执行最后一条以该字符串开头的命令开头的命令(类似js中的startsWith,从后往前匹配找到以字符开头的命令进行执行) 输出重定向 标准输入输出 设备 设备文件名 文件描述符 类型 设备 设备文件名...但是$,`,\除外,拥有调用变量值,引用命令和转义的含义 ` ` 反引号,括起来是系统命令 $() 和反引号一样 # 在shell脚本中#表示注释 $ 表示调用变量 \ 转译字符 echo '$PATH
领取专属 10元无门槛券
手把手带您无忧上云