一、概述
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行