当前位置: 首页 > article >正文

Linux的Shell脚本1

shell启动流程

脚本启动时的home配置文件Linux是:

登录 shell 会话的启动文件

文件 内容
/etc/profile 应用于所有用户的全局配置脚本。

~/.bash_profile 用户私人的启动文件。可以用来扩展或重写全局配置脚本中的设置。

~/.bash_login 如果文件 ~/.bash_profile 没有找到,bash 会尝试读取这个脚本。

~/.profile 如果文件 ~/.bash_profile 或文件

~/.bash_login 都没有找到,bash 会试图读取这个文件。 这是基于 Debian 发行版的默认设置,比方说 Ubuntu。

非登录 shell 会话的启动文件

文件 内容
/etc/bash.bashrc 应用于所有用户的全局配置文件。
~/.bashrc 用户私有的启动文件。可以用来扩展或重写全局配置脚本中的设置。

Echo

echo含义:就是获取输入流并输出输出流。

要记得字符表达模式是最常见的,并且是最好用的,最容易的(但是相对而言也是最难掌握的)
例如 echo .[!..]* 意思就是说让隐藏文件,并且是开头是一个点的那种要被打印出来。

echo实现算术计算:

echo只支持整数的计算

  • 格式echo $((x + y))
  • +
  • -
  • *
  • /
  • % 余数
  • **
echo $(((3 ** 2)*12)
# 可以看出来空格并不是很重要关于shell

但是建议不要加空格,因为shell中空格很容易报错。

alias th = 'node'
# 报错,因为你在th和=中间加了空格这是不对的。

echo进行混合输出

echo 这个东西是 $((12 + 12))

花括号{}

echo 这是{1..12}月。

这是1月 这是2月 这是3月 这是4月 这是5月 这是6月 这是7月 这是8月 这是9月 这是10月 这是11月 这是12月

echo 大叫好我是{托马斯,舒克,贝塔}
# 大家好我是托马斯 大家好我是舒克 大家好我是贝塔

  • 对比[1,2,3]:或者是1,或者是2或者是3

  • {1,2,3}将123全部利用上并不是随机关系。

  • echo a{A{1,2},B{3,4}}b ## aA1b aA2b aB3b aB4b 没错还可以进行嵌套。

小测试

创立从2010到2017年每月每天的文件夹。你们知道怎么用吗?

简述$

接下来的篇章会着重讲述这个$

举例子:

ls -l $(which cp)

## 也就是说 $充当了输入流,将which cp的内容传递给了ls,作为了ls的参数。

讨论 |$

  • | 也可以让前者的输出流作为流给后者但是无法让后者的东西给前者
  • 但是使用$ 就可以很好的避免了这个问题,因为$()就相当于函数的返回值一样,它在哪里都可以。
  • 说真的$的方式是要比流灵活的,但是流这种方式更加简洁更加行云流水只不过需要一些特定的规矩罢了。

""

我们讨论一下双引号
很多功能用法只能单纯的输出了,但是
单词分割,路径名展开, 波浪线展开,和花括号展开都将失效,然而参数展开($USER),算术展开(echo $((1 + 2))),和命令替换(echo $(cal)) 仍然执行

echo “ ( ( 1 + 3 ) ) " e c h o " ((1 + 3))"echo " ((1+3))"echo"((1 + 3))”

其实这个参数展开就是使用 把系统自己设置的变量所表达的意思表达出来,就比如 U S E R 如果没有 把系统自己设置的变量所表达的意思表达出来,就比如USER如果没有 把系统自己设置的变量所表达的意思表达出来,就比如USER如果没有它就是一句话罢了,但是现在有了$所以它就不是一句话了是一个变量了。

如果你遇见 hello world.text文件你是不是很伤脑筋呢?因为当你echo hello world.text时系统会识别成两个文件 hello 和 world.text 所以说当我们使用双引号的时候就没有这个问题了。会忽略单词分割机制

mkdir "dd dd d"
#如果没有双引号就不会忽略单词分割机制就会创立三个文件夹
mkdir dd dd d

但是说实话,我还是觉得使用标准命名法可以省很多事情。切勿玩火装13呀骚年~!

单词分割机制 : 在单词中寻找空格,制表符,和换行符,并把它们看作 单词之间的界定符。这意味着无引用的空格,制表符和换行符都不是文本的一部分, 它们只作为分隔符使用

echo 1 \
> dd
1 dd
这里很明显 \ 就是把末尾的换行符给注释掉了所以这个话就可以换行写。
echo $(cal)
September 2017 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

echo "$(cal)"
   September 2017
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

为什么会有这么大的差别,因为当$把cal的数据输出流给echo的输入流时,没有"“所以说它的参数或者是输入流就不是一个了,就是很多个了,因为没有”"的情况下 空格就不是空格的意思了 是表示分隔符的含义了,然而第二个就不同,这些数据并没有字母分割原理,因为系统识别他们就是一个参数这之间只是单纯的空格和换行罢了,所以就是一个整体的大的输出流被传递给了echo的输入流。

单引号’’

单引号是最厉害的,什么效果都没了

echo '$USER'

$USER

所以在实际中要灵活运用"" ‘’ 和裸奔。

\

两个含义:

  • 转义(例如$ 这种在shell中表达特殊用法的词语)
  • 特殊用途

就如同上文中的\就是注释了末尾的换行符号,比如\\就是让无法输出的特殊符号顺利输出。

特殊用途的话:

  • \a 响铃(”警告”-导致计算机嘟嘟响)
  • \b 退格符
  • \n 新的一行。在类 Unix 系统中,产生换行。
  • \r 回车符
  • \t 制表符

等等。
如果让这个转移符号其效果有两个方式

  • echo -e
  • echo something $‘\a’

资料参考:https://github.com/0voice


http://www.kler.cn/a/386502.html

相关文章:

  • 一种基于深度学习的反无人机无人值守系统及方法
  • 应对JSON解析键值对乱序问题的实用解决方案
  • GEE 数据集——美国gNATSGO(网格化国家土壤调查地理数据库)完整覆盖了美国所有地区和岛屿领土的最佳可用土壤信息
  • 前端Cypress自动化测试全网详解
  • Cesium加载大量点数据卡顿处理办法
  • 人工智能的前沿研究方向与未来发展趋势
  • 智谱AI:ChatGLM强大的生成式语言模型
  • Flutter 插件 sliding_up_panel 实现从底部滑出的面板
  • 华为OD技术一面手撕题
  • 蓝牙FTP 协议详解及 Android 实现
  • RHCE---搭建lnmp云存储
  • MySQL面试遇到这三个问题,直接问懵了!
  • 苹果MacOS最常用快捷键(一)
  • Python爬虫 | 爬取豆瓣电影Top250的数据
  • 《计算机原理与系统结构》学习系列——存储器(上)
  • md5等摘要算法的「撞库」与「加盐」(Ⅰ)
  • 软考:信息安全难点再次复习
  • 如何改 Bug - 2024最新版前端秋招面试短期突击面试题【100道】
  • Excel 数据分析高级建模指南
  • 人工智能在SEO中的关键词优化技巧与策略
  • PaaS云原生:分布式集群中如何构建自动化压测工具
  • 对接世邦XC-9000 HTTP
  • 数据结构————链表
  • 论文阅读《机器人状态估计中的李群》
  • 理解鸿蒙app 开发中的 context
  • Centos 网络接口打vlan标签