ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

(第二课)

2022-02-21 16:36:07  阅读:212  来源: 互联网

标签:shell 第二课 mcd echo 命令 sh bash


 

第二堂课:

以前没有仔细学过shell script,现在认真学一下。

1.

写一个mcd.sh包含以下内容,并source mcd.sh

mcd () {
	mkdir -p "$1"
	cd "$1"
}

上述代码是一个函数,因此source时并不会执行任何命令,但是在source之后,主shell就定义了这个函数mcd

接下来在主shell键入 mcd test,就会执行被定义的命令

 

2.

$0  是脚本名字  

$1-$9  是参数

$_   最后一个参数 

$?  从上一个命令获取错误代码。比如当上一个命令执行失败时返回错误代码1,则使用$?会得到1

!!  上一个由于权限不够而执行失败的命令

从上述代码和返回结果来看,可以看出 $? 的作用,以及“|| &&”的作用

NOTE:用了这么多年ubuntu,没想到shell也有" ||   &&  ",太牛了

 

此外,分号 ";" 能够在同一行里串行执行多个命令,无论前面的命令是否失败,后面的命令总会执行(除非linux kernel crash?)。

 

3.

echo "we are in $(pwd)" :会把$(pwd)里的内容扩展成字符串并打印出来

cat <(ls) <(ls ..)  会把当前目录和父目录下的内容使用cat打印出来 (注意!括号前面不要加空格!否则会报错!)

 

 

#!/bin/bash      #这一行的意思是使用bash

echo "Starting program at $(date)" # date会被替换成日期和时间

echo "Running program $0 with $# arguments with pid $$"

for file in "$@"; do
    grep foobar "$file" > /dev/null 2> /dev/null
    # 如果模式没有找到,则grep退出状态为 1
    # 我们将标准输出流和标准错误流重定向到Null,因为我们并不关心这些信息
    if [[ $? -ne 0 ]]; then
        echo "File $file does not have any foobar, adding one"
        echo "# foobar" >> "$file"
    fi
done

 

在条件语句中,我们比较 $? 是否等于0。 Bash实现了许多类似的比较操作,您可以查看 test 手册(NOTE:test手册中包含了许多bash种用于比较的指令)。 在bash中进行比较时,尽量使用双方括号 [[ ]] 而不是单方括号 [ ],这样会降低犯错的几率,尽管这样并不能兼容 sh(NOTE: sh不能兼容双方括号)

$#:参数个数  $$:进程pid  $@:所有的参数,以空格分隔

 

4.

使用 ls project?   "?"会扩展成一个字符,可以是字母也可以是数字,这个命令会把当前目录下所有project1,2,3,a,b,c的列出来,并且列出来这些目录下的内容(深度为1)

例如 shellcheck这样的工具可以帮助你定位sh/bash脚本中的错误。(TODO:一个可以用来debug shell script的工具?!太棒了!)

 

5.

一个新名词:shebang 

In computing, a shebang is the character sequence consisting of the characters number sign and exclamation mark (#!) at the beginning of a script. It is also called sha-bang,[1][2] hashbang,[3][4] pound-bang,[5][6] or hash-pling.[7]

就是像  #!/usr/local/bin/python  这样的东西就叫shebang

 

6.

标签:shell,第二课,mcd,echo,命令,sh,bash
来源: https://www.cnblogs.com/yinhuachen/p/15919451.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有