ios技巧 -- Shell

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios技巧 -- Shell相关的知识,希望对你有一定的参考价值。

参考技术A 确认当前终端 tty 使用的 Shell 类型:

第一个 Shell 环境是 Thompson Shell ,在贝尔实验室开发并于1971年发布。

现代 Shell 最突出的祖先是被称为 sh 的 BourneShell ,这是以在 AT&T 工作的创始人 Stephen Bourne 命名的。

Shell 一直在基于这个概念,不断添加各种新功能,演变出很多种的 Shell 。

例如,很早版本的 OS X 中使用的是:

在 OS X 10.3 版与 10.4 版之后,默认的 Shell 是:

除了默认的 bash ,现在 macOS 中,默认的 Shell 变成了 zsh 。这是一种由 Paul Falstad 于1990年开发的。它是一个 Bourne 式 Shell ,它使用 bash 和 previous shell 的特性,并添加了更多的特性:

在使用命令行工具时,我们可能会遇到一些教程,可能需要你把一些配置写入到 .bashrc 、 .bash_profile 或者 .zshrc 等。那么这几个文件到底有什么作用和区别?
首先,从文件名称判断 .bashrc 、 .bash_profile 是给 Bash 来使用的。而 .zshrc 是给 zsh 来使用的。

当调用 Shell 时, Shell 从一组启动文件中读取信息并执行命令。读取什么文件就取决于 Shell 是作为交互式登录还是非登录调用。

换言之, Shell 分为交互式的或非交互式的:

交互式 Shell 可以是登录 Shell ,也可以是非登录 Shell 。

当用户通过 ssh 或本地远程登录到终端时,或者使用 --login 选项启动时,将调用登录 shell 。

当作为交互式登录 Shell 调用时, Bash 会先查找 /etc/profile 文件,如果该文件存在,它将运行文件中列出的命令。然后,搜索
~/.bash_profile , ~/.bash_login 以及 ~/.profile 文件,顺序读取。

当 Bash 作为交互式非登录 shell 调用时,会读取 ~/.bashrc 。

所以说, .bashrc 和 .bash_profile 之间的区别是, .bash_profile 当 Bash 作为交互式登录 shell 调用时被读取并执行,而 .bashrc 对于交互式非登录 shell 被执行。

大多数 Linux/Unix 发行版都使用 ~/.profile 代替 ~/.bash_profile 。 ~/.profile 所有 shell 都读取该文件,而 ~/.bash_profile 只有 Bash 才会读取该文件。
~/.zshrc 是 zsh 的交互式 shell 的用户配置。

对于 Bash ,它们的工作方式如下:

对于 zsh ,它们的工作方式如下:

在 tty 中执行 echo $0 ,输出的 Shell 如果前面带 - ,说明是登录 Shell 。

都是以 #!/bin/bash 开头

PS1 指Shell前面的提示符

终端就是一个大型的 shell 函数,所以我们可以直接操作

先做一个参数解析的脚本

find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件 的文件并对之采取相关的操作。
该命令提供的寻找条件可以是一个用逻辑运算符 not、and、or 组成的复合条件。

-name '字串' 查找文件名匹配所给字串的所有文件,字串内可用通配符 *、?、[ ]。
查询多组文件注意要用 -o链接,通过括号包裹,并且需要转义字符
find ./mm.xcframework \( -name "*.framework" -o -name "*.o" \)

-exec 命令名称 对符合条件的文件执行所给的命令,而不询问用户是否需要执行该命令。

表示命令的参数即为所找到的文件;命令的末尾必须加上终结符,终结符有两个:";"和"+"结束。其中";"会对每一个find到的文件去执行一次cmd命令。而"+"让find到的文件一次性执行完cmd命令。也需要添加转义字符。
find ./mm.xcframework \( -name "*.framework" -o -name "*.o" \) -exec echo \;

grep是大小写敏感的,可以添加 -i 来解决
grep "eof" -i find_api.sh
-E --extended-regexp # 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
grep -E "Some|weak" test.m

首先记住一点, 不加引号的 * 首先会被bash进行扩展,所以 find . -name test* 在执行 find 命令前,bash先把 test* 替换成了 test1 test2 ... 然后 find 命令看到的参数实际上是 test1 test2 ..., 加了引号,bash就不去做替换了,那么 find 命令看到的参数就是 test*

set -x 展开输入的命令

=~ 表示是通过zhneg'ze

shell应用技巧

Shell 应用技巧

Shell是一个命令解释器,是在内核之上和内核交互的一个层面。

 技术分享

 

Shell有很多种,我们所使用的的带提示符的那种属于/bin/bash,几乎所有的linux系统缺省就是这种shell,很方便做一些管理,通常使用这种shell

 

bash应用技巧

命令补齐

命令补齐允许用户输入文件名或命令名起始的若干个字母后,按<Tab>键补齐文件名,命令名,若以此开头的文件名或命令名不唯一,则按一下tab键没反应,按第二下列出所有。若唯一则直接补全。

命令历史

命令历史允许用户浏览先前输入的命令并重新调用他们,用history命令可以显示命令列表,!+命令数字可执行,按方向键 ↑和↓可以找到以前执行过的命令

Clear清屏 ctrl+l(快捷键)

Ctrl+u  删除光标前所有字符

 技术分享

 

命令别名

命令别名定义:

范例:alias  copy=cp

      alias  xrm=rm  -r

命令直接写,有选项参数的带双引号

查看别名信息:alias

删除别名信息:unalias copy

可以使操作更简单容易

alias直接列出别名

每个用户自己定义的别名只能自己使用。

 

输入/输出重定向

同标准I/O一样,shell对于每一个进程预先定义3个文件描述字(0,1,2,)。分别对应于:

0 STDIN) 标准输入 键盘

1 STDOUT)标准输出  显示器

2 STDERR)标准错误输出 显示器

重定向表示输入不是从键盘,输出不是从显示器,标准错误输出不是从显示器

 

>>>  输出重定向

范例:ls  -l   /temp>/tmp.msg   重定向到根目录下tmp.msg

          Date >> /tmp.msg

错误输出重定向

范例:cp -R /usr/backup/usr.bak 2>/bak.error

所谓重定向,就是把原本显示在显示器上的内容输出到文件中。

date查看系统当前时间

>会将文件内容清空,这可能不是我们想要的。

于是我们可以用>>可以追加

 

输入重定向是指不是从键盘输入,而是从其他地方输入

错误输出重定向

范例:cp -R /usr/backup/usr.bak 2>/bak.error

Usrunix系统资源,十分重要,有时需要备份,此条命令执行备份,若出错将2写入bak.error,成功什么都不做)

2是什么鬼?

  其实0> 0>>  1<   这是输入,输出重定向的标准写法,0,1都可省略。

  2>  此时2不可省略,若省略则和输出重定向一样了

 

管道

管道:讲一个命令的输出传送给另一个命令,作为另一个命令的输入

使用方法:命令1|命令2|命令3.....|命令n

范例:

  ls -l /etc | more  分页浏览前边命令执行的结果,空格翻页,回车翻行,q退出

  ls -l /etc | grep init  提取与关键词相关的行,并将其列出来

  ls -l /etc | grep init | wc -l  在目录etc下包含init的文件有多少个

管道的作用就是让几个简单的命令发挥很大的作用

wc -l 文件名  显示此文件有多少行

 

命令连接符

用;间隔的各命令按顺序依次执行,比如在写系统的计划任务时,让几个命令在后台依次执行。编译内核时就是敲那几个命令,几个命令间隔时间长,此时便可用;使之依次执行,再加个错误判断,将错误写到日志里。

&&

Command1 && comand2

成功         执行

失败         不执行

前后命令的执行存在逻辑与关系,只有&&前面的命令执行成功后,它后面的命令才被执行

||

Command1 || command2

成功        不执行

失败         执行

前后命令的执行存在逻辑或关系,只有||前面的命令执行失败后,他后面的命令才被执行

 

 

命令替换符

命令替换:讲一个命令的输出作为另一个命令的参数

格式为:命令1  ‘命令2’(键盘数字一左边的小撇)

范例:ls -l ‘which touch’

以上是关于ios技巧 -- Shell的主要内容,如果未能解决你的问题,请参考以下文章

Linux Shell常用技巧 Shell编程

shell应用技巧

shell 中的常用技巧

48个shell技巧

shell bash 技巧说明 shell参数 特殊书写格式

Linux Shell常用技巧 交互式使用shell