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
Usr(unix系统资源,十分重要,有时需要备份,此条命令执行备份,若出错将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的主要内容,如果未能解决你的问题,请参考以下文章