Shell笔记

本文详细介绍了Shell编程的基础知识,包括Shell作为命令行解释器的作用,常用的shell解释器如bash和sh,脚本的编写与执行,变量的使用和管理,以及基本的运算符、条件判断、流程控制(如if、case、for、while)、读取输入、自定义函数和一些实用工具如cut、sed和awk的应用。

Shell笔记

是什么?

  • shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
  • shell还是一个编程语言

解释器

  • 通过输入sudo cat /etc/shells查看电脑上的shell解释器
  • image-20221013152421473
  • 可以看到我电脑上有7种shell解释器,其中bashsh是较为常用的。
  • 输入echo $SHELL查看系统默认shell解释器
  • image-20221013154702439
  • 因为我是mac系统,所以默认解释器是zsh,linux系统默认解释器是bash

脚本

脚本格式

  • #!/bin/bash开头(指定解释器)

如何执行脚本

  • sh file_path
    通过sh来执行脚本
    
    bash file_path
    通过bash来执行脚本
    
    file_path
    通过自己来执行脚本(需要有权限,可通过语句“chmod 777 file_path”来获得权限)
    

多命令操作

  • 需求:在脚本地址的上一级创建一个txt文件,写入I am talent这句话。

  • #!/bin/bash
    
    cd ..
    touch test.txt
    echo "I am talent" >> test.txt
    

变量

常用系统变量

  • $HOME, $PWD, $SHELL, $USER
  • image-20221013161627869

自定义变量

  • 同python定义变量:变量=值

    • 例如:a=1(等号两边不能有空格)
  • 撤销变量:unset 变量

  • 定义静态变量(不能撤销):readonly 变量

  • 将变量提升为全局变量,可供其他Shell脚本调用:export 变量

注意事项

  • 变量名可以由字母、数字、下划线组成,但是不能以数字开头。环境变量建议大写
  • 等号两侧不能有空格
  • 变量默认均为字符串类型,不能直接数值运算
  • 变量的值若有空格,需用引号括起来

特殊变量 $n

  • 语法:$n
  • n为数字,0代表该脚本名称,1-9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
  • parameter.sh文件
    • image-20221013164626283
  • image-20221013164800718

特殊变量 $#

  • 语法:$#
  • 获取输入变量的个数,常用于循环
  • image-20221013165418836
  • image-20221013165442589

特殊变量 $* $@

  • $*:该变量代表命令行中所有的参数,把所有参数看成一个整体
  • $@:同上,但是把每个参数区分对待
  • image-20221013165834327
  • image-20221013165819323

特殊变量 $?

  • $?:记录上一次命令是否正确执行,0表示正确执行了,非0表示执行失败
  • image-20221013170212261
  • image-20221013170224786

运算符

基本语法

  • $((运算式))$[运算式]
  • expr +,-,\*,/,% 加减乘除取余(运算符之间要有空格)

例子

  • expr方法
    • 计算3+2
    • image-20221013170850679
    • 计算(3+2)*4
    • image-20221013170918120
  • $[]方法
    • 计算3+2
    • image-20221013171051598
    • 计算(3+2)*4
    • image-20221013171101902

条件判断

基本语法

  • [ 条件 ]
  • 中括号内的左右两侧必须有一个空格
  • 只要[]内有条件,则返回true,否则返回false

常用判断条件

  • 两个整数之间的比较
    -lt小于-le小于等于
    -eq等于-gt大于
    -ge大于等于-ne不等于
  • 文件权限判断
    -r可读-w可写
    -x可执行
  • 文件类型判断
    -f文件存在且常规文件-e文件存在
    -d文件存在且是目录

例子

  • 检查文件test.sh是否具有写权限

[ -w test.sh ]
echo $?
0
  • 多条件判断(&&表示前一条命令执行成功时,才执行后一条命令,||表示上一条命令执行失败,才执行下一条命令)

  • [ condition ] && echo OK || echo notek
    OK
    
    [ condition ] && [  ] || echo notek
    notek
    

流程控制

if 判断

基本语法
  • if [ condition ];then
    	code
    fi
    
  • if [ condition ]
    	then
    		code
    fi
    
例子
  • image-20221015154643661

case 语句

基本语法
  • case $变量名 in
    	"值1")
    		code1
    		;;
    	"值2")
    		code2
    		;;
    	*)
    		code3
    		;;
    esac
    
注意事项
  • “;;”相当于break
  • “*”相当于default
例子
  • image-20221015155537268

for 循环

基本语法
  • for ((初始值;循环控制条件;变量变化))
    	do
    		code
    	done
    
  • for 变量 in 值1 值2 值3 ...
    	do
    		code
      done
    
例子
  • image-20221015160302073
  • image-20221015162128041

while 循环

基本语法
  • while [ 条件判断式 ]
    	do
    		code
    	done
    
例子
  • image-20221015164833579

read读取控制台输入

基本语法

  • read 选项 参数
  • 选项:
    • -p:指定读取值时的提示符
    • -t:指定读取值时等待的时间(秒)
  • 参数
    • 变量:指定读取值所存放的变量名

例子

  • image-20221015165722778

函数

系统函数

basename基本语法
  • basename [string/pathname] [suffix]
  • 该命令会删除掉所有前缀包括最后一个‘/’字符,然后显示字符串
  • suffix为后缀,若指定了,则会在显示字符串中的suffix给删除
  • image-20221015170527941
dirname基本语法
  • dirname 文件绝对路径
  • 该命令会从给定的绝对路径中删除文件名(非目录部分),返回剩下路径
  • image-20221015170809122

自定义函数

基本语法
  • function 函数名()
    {
    	code
    }
    
例子
  • image-20221015172122739

工具

cut

sed

awk

### 超哥 Shell 编程笔记与教程 超哥的 Shell 编程笔记主要聚焦于基础概念、特殊变量以及子串操作等内容[^1]。以下是一些关键点: #### 一、Shell 编程基础 在 Shell 编程中,特殊变量是理解脚本逻辑的核心部分之一。例如 `$0` 表示脚本名称,`$1` 到 `$n` 表示传递给脚本的参数,而 `$$` 则表示当前进程的 PID[^3]。 #### 二、子壳(Subshell)行为 子壳的行为需要注意,其内部定义的变量无法被父壳访问。此外,当退出子壳时,会按照嵌套层次逐步退出,类似于嵌套的 `for` 循环结构中的 `break` 操作[^2]。 #### 三、循环控制语句 以一个简单的 `for` 循环为例,可以使用 `continue` 或 `break` 来控制循环流程。例如,在下面的代码中,当变量 `i` 等于 4 时,跳过当前循环并继续执行下一次循环: ```bash #!/bin/bash # 演示 continue 的用法 for (( i=1; i<=10; i=i+1 )) # 循环十次 do if [ "$i" -eq 4 ]; then # 如果变量 i 的值等于 4 continue # 跳过本次循环 fi echo $i # 输出变量 i 的值 done ``` 上述代码展示了如何通过条件判断来改变循环的行为[^3]。 #### 四、文件遍历 在实际应用中,Shell 脚本常用于文件或目录的遍历操作。以下是一个遍历指定路径下的文件并输出其路径的示例: ```bash #!/bin/bash # 遍历 /home/user 开头的路径 for file in /home/user* do if [ -f "$file" ]; then # 判断是否为文件 echo "File: $file" elif [ -d "$file" ]; then # 判断是否为目录 echo "Directory: $file" fi done ``` 这段代码结合了 `-f` 和 `-d` 测试选项,分别检查变量 `$file` 是否为文件或目录[^4]。 #### 五、系统命令集成 如果需要将脚本作为系统命令运行,可以将其放置在系统的可执行路径中(如 `/bin` 或 `/sbin` 目录)。这样可以通过简单的命令名直接调用脚本[^2]。 ### 总结 超哥的 Shell 编程笔记提供了从基础到实践的全面指导,包括特殊变量、子壳行为、循环控制以及文件遍历等内容。这些知识点对于初学者和进阶用户都具有很高的参考价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值