Coder Social home page Coder Social logo

bash-tutorial's People

Contributors

a-23187 avatar byog avatar cyrusyip avatar eagleoflqj avatar ecator avatar fanofxiaofeng avatar fuyoufang avatar ilyydy avatar iridiumcao avatar jiashengwu avatar li-shuaishuai avatar lierchao1997 avatar liuyunbin avatar motian avatar nosarthur avatar rain7fine11 avatar ruanyf avatar siriuscor avatar snow212-cn avatar snowball-wang avatar wangruin avatar xqin avatar zhang-siyang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bash-tutorial's Issues

一处笔误

老师你好,发现了一处笔误。
模式扩展-start-end-扩展中一处示例的echo本意应该是ls

$ echo report[!1–3].txt
report4.txt report5.txt

修改为

$ ls report[!1–3].txt
report4.txt report5.txt

在mac15.5里的shell有些不一样

mac新版os使用zsh解析shell命令,数组foo=(a b c d e f) , foo[1] 表示第一个元素,foo[0]输出为空,echo ${foo} 是输出所以元素而不是第一个。
`walt@MacBook-Pro ~ % foo=(a b c d e f)
walt@MacBook-Pro ~ % echo ${foo}
a b c d e f
walt@MacBook-Pro ~ % echo ${foo[0]}

walt@MacBook-Pro ~ % echo ${foo[1]}
a`

子字符串操作关于length的说明

在字符串操作章节的子字符串小节中关于length的说明

如果offset为负值,表示从字符串的末尾开始算起。注意,负数前面必须有一个空格, 以防止与${variable:-word}的变量的设置默认值语法混淆。这时,如果还指定length,则length不能小于零。

length其实是可以小于0的,但是不能比offset更小。这个时候的行为和python中字符串切片操作中效果是类似的。

脚本入门-10.命令执行结果,示例可能会误删本地文件

cd $some_directory
if [ "$?" = "0" ]; then
  rm *
else
  echo "无法切换目录!" 1>&2
  exit 1
fi

示例中,cd $some_directory 当变量不存在时,会cd到用户目录。
进入if的话就会误删用户文件,我的文件已被删除😳,
建议添加个提示,或者把 rm * 换成 类似ls 这种安全命令

怎么用?

你好, 偶是小白,不知道咋用啊?直接打开doc中的文件看吗?有没有其他方式?

3种条件判断方式的思考

阮老师好,大家好:

我对条件判断这篇的几个小建议,但我也是shell新手,不确定以下的建议是否合理。

  1. 差异
    [[[的差异还是很多的,建议将第2小节开头介绍的句子

上面三种形式是等价的,但是第三种形式还支持正则判断,前两种不支持。

修改为

上面三种形式是等价的,主要的差异是前两种是POSIX的标准test命令,第三种是bash的扩展语法,它的表达式语法更接近一般的高级语言,甚至支持正则判断

  1. test 例子优化
    3.5小节在讨论test 判断的逻辑运算,最后举的例子是
if [ ! \( $INT -ge $MIN_VAL -a $INT -le $MAX_VAL \) ]; then
    echo "$INT is outside $MIN_VAL to $MAX_VAL."
else
    echo "$INT is in range."
fi

这里通过-a选项来表达已经不被POXIS推荐了, 原文如下:

That is, in cases where maximal portability is of concern, replace:

test expr1 -a expr2

with:

test expr1 && test expr2

所以例子最好也采用标准推荐的写法

if !  (  [ $INT -ge $MIN_VAL ] && [ $INT -le $MAX_VAL ]  ); then
    echo "$INT is outside $MIN_VAL to $MAX_VAL."
else
    echo "$INT is in range."
fi
  1. 是否有必要列举[[[的全部差异?

CLI的简写

所以又称为命令行环境(commandline,简写为 CLI)
这个应该是 Command Line Interface 的简写,与GUI 对应 Graphics User Interface

set章节-E参数说明

set章节

设置-e参数,会导致trap命令失效(参考《trap 命令》一章),-E参数可以纠正这个行为。

对于-E参数的解释不同于官方手册

-E If set, any trap on ERR is inherited by shell functions, command substitutions, and commands executed in a subshell environment. The ERR trap is normally not in‐herited in such cases.
例如,函数中的错误是不会触发err trap,设置-E以后,函数中的错误也可以触发err trap

示例中的err trap是因为myfunc的调用返回值非0,所以触发err trap,如果在myfunc中添加return 0,就不会有err trap

intro.md中Shell含义的前两点存在疑惑

Bash Documents中有这两段:

A Unix shell is both a command interpreter and a programming language.

  • As a command interpreter, the shell provides the user interface to the rich set of GNU utilities.

  • The programming language features allow these utilities to be combined. Files containing commands can be created, and become commands themselves.

command interpreter <=> user interface
programming language <=> combine these utilities

与本文中:

具体来说,Shell 这个词有多种含义。

首先,Shell 是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为>命令行环境(command line interface,简写为 CLI)。Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。本书中,除非特别指明,Shell 指的就是命令行环境。

其次,Shell 是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用 Shell 命令写出各种小程序,又称为脚本(script)。这些脚本都通过 Shell 的解释执行,而不通过编译。

感觉这两段描述存在出入,是否与原文交错了?
我也刚学,所以有此疑问。

typo,结果多了个\

5.4最后一行

echo "I say:"hello!""
结果应该是I say:"hello!"
文中笔误多了个\

Bash 的模式扩展 --> 4 * 字符扩展 --> 匹配隐藏文件

我执行命令的时候,发现 * 可以匹配隐藏文件,如下

ubuntu server 18.04,bash 4.4.20

liyongjun@box:~/tmp$ la
a  .a  abc
liyongjun@box:~/tmp$ echo .*
. .. .a

centos 7,bash 4.2.46

[centli@VM_0_14_centos tmp]$ la
.a  a.txt
[centli@VM_0_14_centos tmp]$ echo .*
. .. .a

grammar 中的 || 解释错了

Command1 || Command2

上面命令的意思是,如果Command1命令运行失败,则继续运行Command2命令。
引用自 L155-L159

应该是:不管Command1命令运行失败与否,Command2命令都会执行。

$ mkdir foo || mkdir bar

上面例子中,只有mkdir foo命令执行失败(比如foo目录已经存在),才会继续执行mkdir bar命令。如果mkdir foo命令执行成功,就不会创建bar目录了
引用自 #L175-L179

应该是:即使mkdir foo命令执行失败,也会执行继续执行mkdir bar命令

例子

~/temp/mkdir-test 
➜ ls

~/temp/mkdir-test 
➜ mkdir foo             

~/temp/mkdir-test 
➜ ls
foo

~/temp/mkdir-test 
➜ mkdir foo || mkdir bar
mkdir: 无法创建目录 “foo”: 文件已存在

~/temp/mkdir-test 
➜ ls
bar  foo

PDF哪里🈶

建议以PDF格式推广,便于本地保存查阅

网络协议

希望能够在网道上面看到有关HTTP、TCP/IP等网络协议的教程,这可以填补互联网上中文教程的空缺。

发现一个错误

上面代码中,$FILE要放在双引号之中。这样可以防止$FILE为空,因为这时[ -e ]会判断为真。而放在双引号之中,返回的就总是一个空字符串,[ -e "" ]会判断为伪。 这句表达的有问题

array.md 删除数组元素

如果对数组元素赋值空字符串,不能起到删除元素的效果

a=(x y z)
a[1]=''
declare -p a
echo ${#a[@]} # 还是3
echo ${!a[@]} # 0 1 2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.