- 作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者,目前于
新西兰奥克兰大学攻读IT硕士学位
。- 荣誉:
阿里云博客专家认证
、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。跨领域学习
,喜欢摄影、弹吉他、咏春拳。文章深入浅出、语言风趣
;爱吃必胜客社区创立者,旨在“发现美 欣赏美
- 🏆 学习系列专栏
。🏅 Python学习宝库
。🏅 网络安全学习宝库
文章目录
- ⭐️前言
- 🌟 复制文件
- 🌟 位置参数positional arguments
- ☀️那么这和我们平时用的终端里面的命令有什么联系吗, 我们经常也要加一些参数, 比如 ls -l
- ☀️ls -l如何实现的
- ⭐️请问命令行里如何检测到后面参数 -l等等的
- 使用 getopts 命令(适用于Bash脚本):
- 使用位置参数:
- 🌟 要创建一个名为 kk.sh 的卖萌命令
- ☀️ Git 提交出现了大量的文件变动
- ☀️piping
- 🌟 output redirection
⭐️前言
#!/bin/bash
echo hello
osascript -e "display notification \"lqkkkk\" with title \"woshi\""
🌟 复制文件
🌟 位置参数positional arguments
在Bash(Bourne Again Shell)中,您可以使用位置函数来获取脚本或函数中参数的位置。这些参数称为位置参数,它们是脚本或函数接受的命令行参数。位置参数从1开始编号,$1 表示第一个参数,$2 表示第二个参数,以此类推。
☀️那么这和我们平时用的终端里面的命令有什么联系吗, 我们经常也要加一些参数, 比如 ls -l
是的,Bash中使用的位置参数概念与在终端中运行命令时使用的命令行参数有关。在终端中运行命令时,您通常可以指定一些选项和参数来自定义命令的行为,就像您提到的 ls -l
一样。
在这种情况下,ls 是一个命令,而 -l 是一个选项或参数。在Bash脚本中,您可以通过使用位置参数来访问这些传递给脚本的选项和参数。例如,如果您编写一个脚本来处理文件列表,并且您希望能够接受用户指定的选项,您可以在脚本中使用位置参数来访问这些选项和参数。
以下是一个示例,演示如何在Bash脚本中处理类似于 ls -l 这样的命令行参数:
#!/bin/bash
while getopts ":l" option; do
case "$option" in
l)
echo "执行长格式列表操作"
# 在这里执行适当的操作
;;
\?)
echo "未知选项: -$OPTARG"
exit 1
;;
esac
done
# 处理其他参数
shift $((OPTIND-1))
echo "其他参数:$@"
在上面的示例中,getopts 函数用于解析选项,而shift 命令用于将已处理的选项从参数列表中移除,以便您可以处理剩余的参数。
因此,位置参数在Bash脚本中用于处理命令行参数,与您在终端中使用的命令的选项和参数概念密切相关。
☀️ls -l如何实现的
ls -l 命令是Linux和Unix系统中用于列出文件和目录的命令,以长格式显示它们的详细信息。要编写一个简化版本的 ls -l 命令,您可以使用Bash脚本
。以下是一个示例脚本,它演示了如何实现类似 ls -l 的功能:
bash
Copy code
#!/bin/bash
# 使用当前目录作为默认目录,如果用户没有提供目录参数
directory="."
# 检查是否有用户提供的目录参数
if [ $# -gt 0 ]; then
directory="$1"
fi
# 列出目录中的文件和目录,并显示长格式信息
for item in "$directory"/*; do
if [ -f "$item" ]; then
# 如果是文件,显示文件名和文件大小
file_size=$(stat -c %s "$item")
echo -n "File: $item, Size: $file_size bytes"
elif [ -d "$item" ]; then
# 如果是目录,显示目录名和目录中的文件数目
num_files=$(find "$item" -maxdepth 1 -type f | wc -l)
echo -n "Directory: $item, Files: $num_files"
fi
# 显示权限信息和最后修改时间
permissions=$(ls -l "$item" | awk '{print $1}')
last_modified=$(ls -l "$item" | awk '{print $6, $7}')
echo ", Permissions: $permissions, Last Modified: $last_modified"
done
这个脚本的工作方式如下:
默认情况下,它将使用当前目录作为要列出的目录,但用户可以通过提供目录路径作为参数来指定其他目录。
对于指定的目录,脚本使用 for 循环遍历其中的每个项目(文件和子目录)。
对于每个项目,脚本检查它是文件还是目录,并显示相关信息:
如果是文件,它会显示文件名和文件大小。
如果是目录,它会显示目录名和目录中的文件数目。
脚本还会显示文件或目录的权限信息和最后修改时间,这是通过 ls -l 命令和 awk 命令来获取的。
请注意,这只是一个简化的示例,不包括 ls -l 命令的所有功能和选项。实际的 ls 命令非常复杂,具有许多不同的选项和参数,上面的脚本只是一个简单的模拟。要实现完整的 ls -l 功能,需要更多的代码和复杂性。
⭐️请问命令行里如何检测到后面参数 -l等等的
在命令行中,通常使用选项(或标志)来传递参数给命令。这些选项通常以短划线(单个 -)或双短划线(--)开头
,后面跟着选项的名称。例如,ls -l 中的 -l 是一个选项
。
要在命令行中检测和处理选项,您可以使用getopts或getopt命令,或者在Bash脚本中使用$1,$2,$3等位置参数。
使用 getopts 命令(适用于Bash脚本):
getopts 命令是用于解析命令行选项的Bash内置命令。以下是一个示例,演示了如何在Bash脚本中使用 getopts 来处理选项:
#!/bin/bash
while getopts ":l" opt; do
case $opt in
l)
echo "选项 -l 被指定"
# 在这里执行相关操作
;;
\?)
echo "未知选项: -$OPTARG"
;;
esac
done
在这个示例中,getopts 用于解析命令行选项。-l 是一个示例选项。当用户在命令行中指定 -l 时,脚本会识别它,并执行相应的操作。
使用位置参数:
另一种在Bash脚本中处理命令行选项的方式是使用位置参数。在这种情况下,您可以使用 $1,$2,$3 等来访问命令行参数,然后在脚本中进行适当的判断和处理。以下是一个示例:
#!/bin/bash
while [ $# -gt 0 ]; do
case $1 in
-l)
echo "选项 -l 被指定"
# 在这里执行相关操作
;;
*)
echo "未知选项: $1"
;;
esac
shift
done
在这个示例中,while 循环遍历所有的命令行参数,case 语句用于识别选项,然后执行相应的操作。
这些示例演示了如何在命令行中检测和处理选项,以及如何根据用户提供的选项执行相应的操作。根据您的需要,您可以扩展这些示例来处理更多的选项和参数。
🌟 要创建一个名为 kk.sh 的卖萌命令
可以按照以下步骤操作:
使用文本编辑器创建一个新文件,并将以下内容复制粘贴到文件中:
#!/bin/bash
echo "kk无敌可爱拳"
这个脚本非常简单,只是输出了一条信息。
保存文件并退出文本编辑器。
接下来,您需要将脚本文件设置为可执行文件。在终端中执行以下命令:
chmod +x kk.sh
这会将执行权限添加到 kk.sh 文件。
现在,您可以将脚本移动到系统的一个目录,以便系统可以找到它。通常,将脚本添加到 /usr/local/bin 目录是一个不错的选择,因为这个目录包含了系统命令。
sudo mv kk.sh /usr/local/bin/
输入您的管理员密码来确认移动操作。
现在,您可以在终端中运行 kk.sh 命令来执行卖萌命令。例如:
kk.sh
这将输出 “kk无敌可爱拳”。
您的卖萌命令 kk.sh 现在已经可以像其他系统命令一样在终端中使用了。请注意,如果您不希望输入 sh 扩展名来运行脚本,可以考虑在脚本的开头使用 #!/bin/bash 或 #!/usr/bin/env bash 来指定解释器,然后将脚本移动到系统路径中。这将使您能够直接运行 kk,而不是 kk.sh。
☀️ Git 提交出现了大量的文件变动
特别是在 node_modules 文件夹,这是因为你将 node_modules 文件夹提交到了 Git 仓库。通常,这种做法并不推荐,原因如下:
体积庞大:node_modules 文件夹通常包含大量的文件,这会使你的仓库体积变得非常庞大。这不仅会占用更多的存储空间,而且也会影响克隆和拉取仓库的速度。
更新频繁:依赖库可能会频繁更新。每当你更新依赖时,node_modules 中的文件都会发生变化,这将导致你需要进行大量的提交和推送,进一步增加仓库的体积。
依赖管理:npm 或 yarn 等包管理器已经为你处理了依赖关系。只需在你的项目中保留一个 package.json 和(可选的)package-lock.json 或 yarn.lock 文件即可。其他人在克隆项目时可以通过运行 npm install 或 yarn 来安装所有依赖。
环境差异:不同的开发环境可能会有不同的依赖需求(例如,不同的操作系统可能需要不同的二进制文件)。将 node_modules 提交到 Git 中,可能会导致在不同环境下出现兼容性问题。
如何解决?
为了避免这种情况,你应该在 Git 仓库中添加一个 .gitignore 文件,并在其中指定 Git 忽略 node_modules 文件夹。这样,无论何时进行提交,node_modules 中的文件都不会被包含在内。你可以按照以下步骤操作:
在项目根目录创建一个名为 .gitignore
的文件。
在 .gitignore 文件中添加以下内容:
Copy code
node_modules/
将 .gitignore 文件提交到你的 Git 仓库。
如果 node_modules 已经被提交到了你的仓库,你需要从仓库中移除它。可以使用以下命令:
bash
Copy code
git rm -r --cached node_modules
git commit -m "Remove node_modules from repository"
git push
这些步骤将帮助你保持 Git 仓库的整洁和高效。
☀️piping
ls -l /usr/bin | grep kk
🌟 output redirection
例子
> 覆盖
>> 继续添加上
> cat hello.txt
kk无敌可爱拳
~/Code ---------------------------------------------------------- at 16:57:38
> echo wudi >>hello.txt
~/Code ---------------------------------------------------------- at 16:58:15
> cat hello.txt
kk无敌可爱拳
wudi
~/Code ---------------------------------------------------------- at 16:58:18
>