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

Shell入门(保姆级教学)

Shell是一种命令行解释器,也是一种脚本语言,广泛应用于Unix和类Unix系统中,例如Linux。它是用户与操作系统内核交互的桥梁,通过Shell可以执行系统命令、管理文件系统、处理文本数据等。本文将带你入门Shell编程,涵盖基础的语法、常用命令和一些实用技巧。

Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

1.Linux 的 Shell 种类:

        Bourne Shell(/usr/bin/sh或/bin/sh)

        Bourne Again Shell(/bin/bash)

        C Shell(/usr/bin/csh)

        K Shell(/usr/bin/ksh)

        Shell for Root(/sbin/sh)

在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。

#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序

作为可执行程序   将上面的代码保存为 test.sh,并 cd 到相应目录

注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找

2.基础语法

1.用户定义变量(User-defined variables):

  • 这些是用户自己定义的变量,可以随时创建和修改。定义时不需要声明类型。
NAME="John"
AGE=30

2.环境变量(Environment variables):

  • 环境变量是在Shell启动时设置的变量,对所有Shell和Shell脚本都可见。
export PATH="/usr/local/bin:$PATH"

3.环境变量(Environment variables):

  • 这些变量用于访问脚本或者函数的命令行参数。
  • $0 表示脚本名,$1$2, ... 表示第一个、第二个命令行参数,以此类推。

3.变量的使用

  • 赋值和引用:

    • 赋值使用等号 =,但在使用时不需要 $。例如:NAME="John"
    • 引用变量的值使用 $ 符号,例如 echo $NAME
  • 特殊变量:

    • $0: 当前脚本的文件名。
    • $$: 当前Shell进程的ID。
    • $?: 上一个命令的退出状态。
#!/bin/bashNAME="Alice"
AGE=25echo "Hello, $NAME! You are $AGE years old."# 使用环境变量
echo "My home directory is $HOME."# 位置参数
echo "First argument: $1"
echo "Second argument: $2"# 特殊变量
echo "Script name: $0"
echo "Process ID: $$"

高级用法

  • 数组:

    • Shell支持数组,可以使用类似array[index]的语法访问数组元素。
  • 间接引用:

    • 可以使用 ${!var} 实现间接引用,例如 varname="NAME",然后使用 echo ${!varname} 访问 NAME 变量的值。
  • readonly和unset:

    • readonly NAME 可以将变量设为只读,不允许修改。
    • unset NAME 可以删除变量。
http://www.lryc.cn/news/412001.html

相关文章:

  • 【JDK11和JDK8并行与切换】
  • vue大数据量列表渲染性能优化:虚拟滚动原理
  • 昇思25天学习打卡营第1天|快速入门
  • LinkedList 实现 LRU 缓存
  • ubuntu安装workon
  • (面试必看!)锁策略
  • RAGflow:开源AI框架的创新与应用
  • AI的学习明确路径
  • 【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
  • mysql排查死锁的几个查询sql
  • 快速部署私有化大模型 毕昇(使用docker-compose方式)
  • B端:导航条就框架提供的默认样式吗?非也,看过来。
  • idea的git与SVN切换
  • 互联网家政小程序,为大众带来高效、便捷的服务
  • 【常用库】【pytorch】基本部件
  • 深入Scrapy框架:掌握其工作流程
  • 从零开始学习机器学习,掌握AI未来的关键!
  • CI/CD(持续集成/持续部署)
  • 实现字母的大小写转换。多组输入输出(c语言)
  • 2024华为OD机试真题-最小矩阵宽度Python-C卷D卷-200分
  • 【Vue3】标签的 ref 属性
  • llama-factory 系列教程 (六),linux shell 脚本自动实现批量大模型的训练、部署与评估
  • python安全脚本编写之流量泛洪
  • 一文看懂Java反射、注解、UML图和Lambda表达式
  • 【漏洞复现】搜狗输入法简单绕过Windows锁屏机制
  • JAVA Spring学习Day1
  • linux常见面试题(三)
  • 【JS】ES6新类型Map与Set
  • FETCH FIRST ROW ONLY和 DISTINCT ON和 LIMIT 1的用法
  • 前端小白安装node、vue、Express、Electron及(Electron桌面端exe应用开发)