小白到运维工程师自学之路 第四十一集 (shell脚本的基本使用)

一、概述

        Shell是一种命令行解释器,它是一种编程语言,用于在操作系统上执行命令和脚本。Shell语言是一种脚本语言,它可以用于自动化任务、批处理、系统管理和编写简单的程序。Shell语言通常用于Unix和Linux操作系统中,但也可以在其他操作系统中使用。常见的Shell语言包括Bash、Csh、Ksh、Zsh等。Shell语言的优点是易于学习和使用,可以快速编写简单的脚本,而且可以与其他系统命令和工具集成使用。

二、常用符号

1、空格:用于分隔命令和参数

2、百分号%:表示在字符串中匹配模式

3、双引号"":用于保留字符串中的空格和特殊字符的含义

4、单引号'':用于保留字符串中的所有字符的字面含义

5、反斜杠\:用于转义特殊字符,使其失去特殊含义

6、管道符 | :用于将一个命令的输出作为另一个命令的输入

7、大于号、小于号<  <<  >> >:用于将命令的输入或输出重定向到文件或设备

8、*乘号:代表所有

9、问号? 中括号[]:用于匹配文件名或路径名中的多个字符

10、分号; :用于分割多个命令

11、& :用于将命令放入后台运行

12、井号#:注释一行命令

13、感叹号!:是逻辑非运算符,表示取反。它可以用于条件语句、循环语句、命令行参数等多种情况中,用于判断某个条件是否不成立

14、双括号(( )) :用来进行计算、运算

三、选项(目前只学明白了两个常用的)

1、-f :条件测试符号,用于测试文件是否存在且为普通文件如果是普通文件则返回1 如果不是普通文件则返回0

2、-s :表示在脚本中使用参数时,后面的参数将被视为标准输入

3、还有一个英文缩写tr:tr是一个用于转换或删除字符的命令

三、$的用法

1、变量引用:$后面跟着变量名,表示引用该变量的值。例如,$HOME表示当前用户的home目录。

2、命令替换:$()或``符号包裹的命令,表示执行该命令并将输出结果作为字符串返回。例如,$(date +%Y-%m-%d)表示执行date命令并返回当前日期。

3、环境变量:$后面跟着环境变量名,表示引用该环境变量的值。例如,$PATH表示系统的环境变量PATH的值

4、特殊变量:$后面跟着特殊变量名,表示引用该特殊变量的值。例如,$$表示当前进程的PID

5、正则表达式:$后面跟着正则表达式,表示匹配以该正则表达式结尾的字符串。例如,*.txt表示匹配以.txt结尾的文件名

四、编写简单的脚本(写完脚本后需要给脚本可执行权限,脚本的后缀为.sh)

1、将当前目录下所有大写文件名替换为小写文件名的脚本


#!/bin/bash                    
for file in *
do
    if [ -f "$file" ]; then
        lowercase=$(echo "$file"  | tr '[:upper:]' '[:lower:]')    
      
	if [ "$file" != "$lowercase" ]; then    
            mv "$file" "$lowercase"	 	
        fi
    fi
done




#!/bin/bash         告诉系统这是一个脚本
使用for循环  file 表示文件   * 表示所有文件
使用if语句 [-f "$file"] 表示如果这个文件是一个普通文件则进行下一步
lowercase是小写的意思 $(echo "$file" | tr '[:upper:]' '[:lower:]') 表示使用echo输出文件名使用|进行二次处理 tr表示转换  upper表示大写  lower表示小写 表示如果文件名是大写的话就转换为小写
使用第二个if语句["$file" != "$lowercase"] !表示取反 表示如果文件不是小写就执行下一条
这里使用mv命令进行改名 mv"$file" "$lowercase" 表示将文件名修改为小写的文件名
done表示结束这个循环

 进行脚本测试

可以看到执行完成后目录中名称为大写的文件名称全部变成了小写

 

2、统计当前目录下所有文件一共有几行的脚本

#!/bin/bash
total_lines=0                                                
for file in *
do
    if [ -f "$file" ]; then        
        lines=$(wc -l < "$file")   
        total_lines=$((total_lines + lines))  
    fi
done
echo "Total lines: $total_lines"  


定义变量total_lines=0  全部的行等于0
使用for循环 类型是文件 所有文件
测试文件是否为普通文件 "$file"表示文件名
将文件“$file”的行数重定向道wc -l 命令中 得到的结果通过$返回给lines
总行数等于total_lines+lines得到的结果使用$返回给total_lines   (()):表示计算
echo输出总行数   $调用total_lines的数值

进行脚本测试

可以看到etc中的文件一共有14961行

 

以上就是shell脚本的基本使用(语言这个东西需要慢慢钻研)

如有错误欢迎各位大佬批评指正,我们共同进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值