ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux shell 目录

2022-06-19 19:00:58  阅读:124  来源: 互联网

标签:shell 变量 echo 命令 linux var 目录


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

历史命令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编辑器使用

​ 参考链接

标签:shell,变量,echo,命令,linux,var,目录
来源: https://www.cnblogs.com/Waynett/p/16391113.html

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

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

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

ICode9版权所有