linux shell 目录


linux shell 目录

目录

参考链接

类型

unix支持三大主流shell

  1. Bourne shell(AT&T开发 shell),标准的unix shell,以$提示
  2. C shell(Berkeley分校 shell),以%提示
  3. Korn shell (Bourne shell的一个扩展集,AT&T的David Korn开发)

linux支持的shell(可有四种)

  1. GNU的shell,默认GNU bash(Bourne Again shell)
  2. TC shell 是unix C shell的一个兼容分支(模仿TENEX名字)
  3. Z shell 是linux shell的一种,综合体:结合了bash,tcsh,ksh
  4. 还有一种pdksh(Public Domain Korn shell),是需要向AT&T付费

查看支持/etc/shell

POSXI标准,操作系统标准,其中规范了shell和工具软件标准

执行解析顺序

  1. 别名
  2. 关键字
  3. 函数
  4. 内置命令
  5. 可执行程序(派生子shell执行)

​ 命令的退出时子shell完成,exit返回给父shell的状态

部分相关命令

查询进程 ps pstree kill

ps -aux

pstree

kill 2564

查询用户身份 id

为文件创建掩码 umask

为文件创建掩码,可以使目录和文件默认权限减去umask值

chmod 修改文件和目录访问权限

image-20220616221818452

chown 改变文件和目录的所有者

​ chown 用户:组 filetest 例如 chown root:root filetest.txt

env 查看变量

env 显示环境变量(理解为全局)

| 管道

pipe | 管道两边相当于开了两个子shell,同时执行,不过一个要往管道输入东西,一个要从里面读取东西

who | wc 相当于 who > tmpfile;wc tmpfile;rm tmpfile;

shell和信号(进程会反应)

有些输入会形成信号,然后给shell,会致使shell下进程做出下面动作:

  • 忽略信号
  • 停止进程
  • 继续进程
  • 进程被程序中定义的函数捕获,进行处理

信号表:

image-20220616222246289

image-20220616222322488

shell主要内容

1. 开头(第一行)和环境说明

#!/bin/bash

#!为幻数

一个进程(shell)的环境包括:变量、打开的文件、当前工作目录、函数、资源限额、信号等。

使用source(.)命令可以使文件的所有设置成为当前shell的一部分。

/etc/profile 系统级初始化文件

​ 找到/etc/profile.d/*文件执行

.bash_profile(三选一执行) 在用户主目录下,执行~/.bashrc,没有找下面

​ ~/.bashrc,env变量被赋值为名称.bashrc,每次bash脚本,或者shell启动,都会对这个文件进行source,包含了下面设置

​ set -o 打开内置选项

​ set +o 关闭内置选项

​ 直接set -o 查看所有当前设置

image-20220616224640182

​ 执行/etc/bashrc

image-20220616225137180

.bash_login(三选一执行) 没有找下面

.profile(三选一执行)没有就到此为止

​ 用户自定义的初始化文件

image-20220616225218017

命令默认搜索路径 echo $PATH

hash命令 显示登陆会话的已执行命令完全路径名

命令分组(注意内侧空格)

​ ( ls; pwd; date ) > outfile

后台执行

​ man sh | lp&

进程控制(作业控制)

​ [root@192 ~]# jobs -l 显示后台的作业
​ [1]+ 2998 Stopped vi

​ jobs %% 最后一个放进后台的

​ fg %1 拿回前台

​ kill 2998

linux shell 目录

历史命令history

image-20220616231657718

image-20220616231721377

别名

​ alias cp=‘cp -i’

​ unalias cp 删除别名

2. 注释 使用#号

3. 通配符

有操作含义的字符 ,在shell中不仅仅是看到的字符串

ls f{a,b,stab} 注意里面没有空格

image-20220616232703369

注意此处(){}在执行命令时的区别

()开启子shell

{空格echo aa;cc=cc;} 在本shell中执行

image-20220616232456739

取消了元字符功能

image-20220616233336632

扩展gloabbing功能(和正则有点区别)

image-20220616233533533

对于双引号,单引号处理特殊的元字符,会使其失效,就是普通字符

但是对于双引号不回禁止$变量替换 和 反引号命令替换

/ 转义单个字符,在“” ‘’ 里面也被保护,但是在“” 中碰到特殊元字符会触发保护,可解决双引号$ 和反引号问题

单双互相保护(单双也是特殊字符)

image-20220618131800303

4. 局部变量和全局变量

取消变量 unset

设置变量 declare -a -f -F -i -r -x

image-20220616233742790

设置全局变量

export var=aa

declare -x arr=aa

image-20220616233936922

5. 提取变量 $name 变量修饰符

image-20220618125458287

var2=${var:-word} var有则自己给 if var 为空,则var 为word,var为空;否则var为空,var2为var

var2=${var:+word} var则别人给

var2=${var:=word} var有则自己给 if var 为空,则var 为word,var为空;否则var为word,var2为var

var2=${var:?word} var有则自己给,否则输出word信息

var2=${var:0:4} 0为开始位置,4为长度

var2=${var:0} 0为开始位置

取消变量使用 unset var 没有$符号

image-20220617000143621

${var%模式}鱼尾少不贪 使用上面的通配符匹配

echo ${var:=aaadddccdcc} echo ${var%d??} 注意完整匹配

${var%%模式}

${var#模式}

${var##模式}

/etc/aaa.txt ${var##*/} 可取出basename效果

${#var} 变量长度

6. 显示输出 echo printf

echo用法

image-20220616234256756

printf 用法

image-20220616234440150

image-20220616234452300

image-20220616234514874

7. 读取用户输入 read

read var1 var2 var3 对于其余的都会给var3

默认给REPLY

image-20220618235443186

image-20220618235459311

8. 脚本位置参数 $* shift

注意,$@ $*

如果是 “$@” 看成分割的”aa” “BB” “cc”,此时for循环三次

如果是 “$*” 看成不分割的”aa BB cc”

image-20220618131041734

image-20220618131559131

9. 重定向符号

shell 启动时继承了3个文件stdin stdout stderr

来自键盘 去向屏幕 去向屏幕

1>

2>

find . -name *.c -print > foundit 2> /dev/null 双向奔赴

&> 或者 >& 一起走向

&1

&2

>>

image-20220618133816870

exec和重定向

image-20220618231212027

image-20220618231242872

exec ls 运行后退出shell,小心

here文档和重定向输入<<

image-20220618231807751

image-20220618231827453

shell调用选项

image-20220618232101014

内置set命令选项

image-20220618232116896

image-20220618232131741

shopt命令和选项

image-20220618232255895

image-20220618232310346

shell内置命令

image-20220618232348694

image-20220618232438150

image-20220618232458606

10. 数组使用

数组参考链接

11. 命令替换型变量赋值

反引号 `命令`

$(命令)

12. 算数运算

求值给变量赋值

$[ exp ]

可不带空格 echo $[1+5*3]

echo /([/)v1+53] echo $[v1+53] 使用变量

$(( exp ))

echo $((1+5*3))

echo /(((/)v1+53)) echo $((v1+53)) 使用变量

declare -i var1 必须先声明,再var1=5+5/5

let 可用于整数运算和数值表达式测试

let “i+=1” ((i+=4))代替let

使用expr(待补充中)

浮点运算

echo “scale=3; 13/2”|bc

使用awk

13. 运算符 大小 等于 逻辑

14. 条件语句 if case

条件结构和流程控制

15. 循环语句 for while until

16. 文件测试(和if一起使用)

17. 函数

image-20220618133657426

18. 调试shell脚本

19. 三剑客和linux正则表达式

​ 三剑客参考链接

​ linux正则表达式参考链接

20. linux 正则表达式参考

21. vim编辑器使用

​ 参考链接

原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/268382.html

(0)
上一篇 2022年6月19日
下一篇 2022年6月20日

相关推荐

发表回复

登录后才能评论