首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Bash 老司机也可能忽视 10 大编程细节

一般常用 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 等做为开头原因,因为这样就可以让脚本运行在更安全环境下。

85760
您找到你想要的搜索结果了吗?
是的
没有找到

是不是Bash编程老司机,看完这10条细节就知道了

作为一名 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 等做为开头原因,因为这样就可以让脚本运行在更安全环境下。

1.1K71

Shell 脚本避坑指南(一)

大家好,是张晋涛。 提到 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 值时候会直接退出。

62930

简单&基础shell操作_转发分享

写下来只是作为笔记,如果侵权,请留言,立马删除。 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 开头文件:

1K10

sh脚本

$ 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变量值。

10.7K30

shell十三问,为linux学习打基础(一)

很明显,第二个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使用者要特别注意)

1.2K40

07-1透过shell看世界——扩展

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)查看可用变量列表 想查看可用变量列表...,如果变量名拼写错误,仍然会进行扩展,只不过结果输出是一个空字符而已。

76220

shell 循环命令

大家好,又见面了,是你们朋友全栈君。 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 命令可以像

1.2K20

使用Docker构建安全虚拟空间

所以打算把自己 vps 分成虚拟空间给大家用。但是一般虚拟空间安全性难以得到保证,一个空间出问题,其他用户可能都跟着遭殃,也就是旁站攻击。...; 不能通过 ssh 登陆 (其实这也是用户能通过 ftp 连接 必须条件。...@'%';flush privileges;\""# 输出账户信息echo "create database user:$1@'%' indentified by $pass" 3....为什么会出现这种情况呢?大概猜想是因为容器内还有一些其他服务,当限制内存小于 256m 时候,这些服务无法被同时启用,但是我们可以只启用 apache 啊!...,容器会修改 /app(/var/www/html 软链接)文件夹所有者为 www-data ,那么我们就需要在启动容器时,设置这个环境变量值为真。

3.2K30

一篇文章从了解到入门shell

特别要注意,非常容易写错 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash关键字。...${XXX-$ABC}" #如果XXX不存在,默认值是变量ABC echo "从开头删除最短匹配=${ABC#my}" # 从开头删除 my 匹配最短字符串 echo "从开头删除最长匹配=${ABC...echo "456" echo -e "\a处理特殊符号" #-e 处理特殊符号 -n 让echo输出结束以后,在默认不输出换行符 -eecho处理特殊符号,比如: 符号 作用\a 发出警告声 \...\033[0m回复到缺省设置 还可以有一些其他动作 echo -e "\033[2J" #清除屏幕 echo -e "\033[0q" #关闭所有的键盘指示灯 echo -e "\033[1q" #...命令替换 发现了$(cmd)结构,便将$(cmd)中cmd执行一次,得到其标准输出,再将此输出放到原来命令。

2.1K30

linuxshell编程入门

这种对话方式可以是: 交互方式:从键盘输入命令,通过/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字符串将被作为标准错误输出,否则输出变量值。

8K30

shell学习教程(超详细完整)

为什么要学习和使用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

5.6K20

前端运维之Shell基础

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

65120
领券