码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Linux进阶-Shell编程


    目录

    Shell与图形化界面

    shell简介

    shell、中断、控制台区别

    设置PATH

    永久设置1

    永久设置2

    临时设置

    Shell启动方式

    Shell脚本语法

    定义变量

    使用变量

    将命令的结果赋值给变量

    删除变量:unset

    退出当前进程:exit

    读取从键盘输入的数据 :read

    对整数进行数字运算:(())

    逻辑与或

    检测某个条件是否成立

    管道(可将两个或多个命令连接在一起,上一个命令的输出信息会作为下一个命令的输入信息):command1 | command2

    if语句 

    if else语句

    if elif else语句

     case in语句

    for in循环 

    while循环

    函数

    全局变量:直接定义,只能在当前的shell进程里访问,但其它进程以及shell进程的子进程是不能访问的。

    环境变量:export,能在当前的shell进程以及shell进程的子进程访问,但其它进程是不能访问的。

    全部用户、全部进程共享:/etc/bash.bashrc

    一个用户、全部进程共享:~/.bashrc

    shell子进程中执行:/bin/bash和./

    当前进程中执行:source和.


    Shell与图形化界面

    shell简介

    shell是应用程序的一种,比如/bin/sh、/bin/bash等,是用户与linux内核沟通的桥梁。对外接收用户输入的命令,对内通过“系统调用”传递给内核运行。呈现内核运行界面。

    Shell原寓“壳”,即充当着“中间人”身份。shell以键盘操作为主,需要记忆各种控制命令。图形化界面以鼠标操作为主,简单易学。

    比如我们输入“ls”并回车时,shell程序找到“ls”程序并运行,把结果打印出来。

    shell脚本常用后缀名:.sh。

    Shell寻找程序:会去PATH的环境变量所指示的位置寻找。

    查看PATH变量可得到指示的位置,用“:”隔开,可使用“echo $PATH”查看。

    shell命令本质:内置命令/外部命令(应用程序)。(可由type 判断)

    例如:创建hello.c,意在终端输出hello world。然后编译这个c文件(gcc hello.c -o hello),然后把hello移动到/usr/bin/。

    当向终端输入hello时,终端输出hello world。这个c文件就成了shell的外部命令。

    shell、中断、控制台区别

    shell:指命令行解释器,常用的解释器有bash、sh,在Ubuntu系统默认使用bash解释器,所以有时说bash也是指命令行。

    Terminal(终端):指用来运行Shell的工具。如Ubuntu系统自带的本地终端、开发板的串口终端、网络访问的ssh终端。

    Console(控制台):特指某些终端,通常是指它的物理形态,如带键盘和显示器的物理设备。

    设置PATH

    永久设置1

    修改/etc/environment,比如:sudo gedit /etc/environment,然后添加下行红色部分。然后重启系统或重新登录。

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/用户名"

    永久设置2

    修改~/.bashrc,在行尾添加或修改下行部分。然后重启系统或重新登录。

    export PATH=$PATH:/home/用户名

    临时设置

    在终端执行以下命令,这只对当前终端有效。

    export PATH=$PATH:/home/用户名

    Shell启动方式

    相对路径运行(./)
    指定解释器运行(/bin/bash)
    source和.

    1. #include
    2. int main()
    3. {
    4. printf("hello world!\n");
    5. return 0;
    6. }
    7. #!/bin/bash
    8. echo "hello world!"

    Shell脚本语法

    定义变量

    variable=value

    variable='value'(符号内不做逻辑判断)

    variable="value"。 

    使用变量

    $variable

    ${variable}

    将命令的结果赋值给变量

    variable=`command`

    variable=$(command)

    删除变量:unset

    特殊变量描述
    $0当前脚本的文件名
    $n(n>=1)传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2
    $*传递给脚本或函数的所有参数
    $@传递给脚本或函数的所有参数。当被双引号“”包含时,$@与$*稍有不同
    $#传递给脚本或函数的参数个数
    $$当前Shell进程ID。对于Shell脚本,就是这些脚本所在的进程ID
    $?上个命令的退出状态或获取函数返回值

    退出当前进程:exit

    读取从键盘输入的数据 :read

    对整数进行数字运算:(())

    逻辑与或

    command1&&command2

    command1||command2

    检测某个条件是否成立

    test expression

    [ expression ]

    选项描述
    -eq判断数值是否相等
    -ne判断数值是否不相等
    -gt判断数值是否大于
    -lt判断数值是否小于
    -ge判断数值是否大于等于
    -le判断数值是否小于等于
    -z str判断字符串str是否为空
    -n str判断字符串str是否为非空
    =和==判断字符串str是否相等
    -d filename判断文件是否存在,并且是否为目录文件
    -f filename判断文件是否存在,并且是否为普通文件

    管道(可将两个或多个命令连接在一起,上一个命令的输出信息会作为下一个命令的输入信息):command1 | command2

    if语句 

    1. if condition
    2. then
    3. statement(s)
    4. fi

    if else语句

    1. if condition
    2. then
    3. statement1
    4. else
    5. statement2
    6. fi

    if elif else语句

    1. if condition1
    2. then
    3. statement1
    4. elif condition2
    5. then
    6. statement2
    7. ...
    8. else
    9. statement
    10. fi

     case in语句

    1. case expression in
    2. pattern1)
    3. statement1
    4. ;;
    5. pattern2)
    6. statement2
    7. ;;
    8. pattern3)
    9. statement3
    10. ;;
    11. ......
    12. *)
    13. statementn
    14. ;;
    15. esac

    for in循环 

    1. for variable in value_list
    2. do
    3. statements
    4. done

    value_list:

    直接给出具体的值;

    给出一个取值范围;

    使用命令的执行结果;

    使用Shell通配符;

    使用特殊变量。

    while循环

    1. while condition
    2. do
    3. statements
    4. done

      

    函数

    1. function name(){
    2. statements
    3. [return value]
    4. }

    全局变量:直接定义,只能在当前的shell进程里访问,但其它进程以及shell进程的子进程是不能访问的。

    环境变量:export,能在当前的shell进程以及shell进程的子进程访问,但其它进程是不能访问的。

    shell进程每次启动时,它都会执行shell配置文件的代码来做一些初始化的工作。 

    如果我们将shell变量的定义放到shell配置文件的话,shell进程一启动,就会去定义这些变量。

    与Bash Shell有关的配置文件主要有:

    /etc/profile

    ~/.bash_profile

    ~/.bash_login

    ~/.profile

    ~/.bashrc

    /etc/bashrc

    /etc/bash.bashrc

    /etc/profile.d/*.sh

    Shell执行顺序:/etc/profile、~/.profile(~/.bash_profile、~/.bash_login)

    全部用户、全部进程共享:/etc/bash.bashrc

    一个用户、全部进程共享:~/.bashrc

    shell启动方式对变量的影响

    shell子进程中执行:/bin/bash和./

    当前进程中执行:source和.

  • 相关阅读:
    mysql中批量替换text文本中的某一部分数据
    原来电商企业也能运用模型规划设计营销活动
    C++ —— 命名空间
    一、Shell编程_5Shell流程控制
    3d场景重建&图像渲染 | 神经辐射场NeRF(Neural Radiance Fields)
    MySQL性能调优与架构设计【常见面试题】
    Tensorflow笔记——神经网络优化
    【Spring】Bean 的作用域
    DayDayUp:计算机技术与软件专业技术资格证书之《系统集成项目管理工程师》课程讲解之十大知识领域之4辅助—项目沟通管理
    便捷安装机房常用python库
  • 原文地址:https://blog.csdn.net/weixin_47077788/article/details/127943877
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号