脚本如何获取命令行参数

wen 实用脚本 27

本文目录导读:

脚本如何获取命令行参数

  1. Bash/Shell 脚本
  2. Python
  3. JavaScript (Node.js)
  4. Ruby
  5. Perl
  6. 通用建议

在大多数主流脚本语言中,获取命令行参数的方法不同,以下是几种常见脚本语言的实现方式:

Bash/Shell 脚本

#!/bin/bash
# 直接使用位置变量
echo "脚本名: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "所有参数: $@"
echo "参数个数: $#"
# 遍历所有参数
for arg in "$@"; do
    echo "参数: $arg"
done
# 使用 shift 处理参数
while [ $# -gt 0 ]; do
    echo "处理参数: $1"
    shift
done

Python

import sys
# 基本获取
print(f"脚本名: {sys.argv[0]}")
print(f"第一个参数: {sys.argv[1]}")
print(f"所有参数: {sys.argv[1:]}")  # 切片去掉脚本名
# 使用 argparse 模块
import argparse
parser = argparse.ArgumentParser(description='示例脚本')
parser.add_argument('name', help='用户名')
parser.add_argument('--age', type=int, help='年龄')
parser.add_argument('--verbose', '-v', action='store_true', help='详细输出')
args = parser.parse_args()
print(f"名称: {args.name}")
print(f"年龄: {args.age}")
print(f"详细: {args.verbose}")

JavaScript (Node.js)

// 使用 process.argv
console.log('脚本名:', process.argv[1]);
console.log('所有参数:', process.argv.slice(2));
// 使用 yargs 库(需要安装:npm install yargs)
const yargs = require('yargs')
  .option('name', {
    alias: 'n',
    description: '用户名',
    type: 'string'
  })
  .option('age', {
    alias: 'a',
    description: '年龄',
    type: 'number'
  })
  .argv;
console.log('名称:', yargs.name);
console.log('年龄:', yargs.age);
console.log('其他参数:', yargs._);

Ruby

# 使用 ARGV 常量
puts "第一个参数: #{ARGV[0]}"
puts "所有参数: #{ARGV}"
# 使用 OptionParser
require 'optparse'
options = {}
OptionParser.new do |opts|
  opts.banner = "用法: script.rb [选项]"
  opts.on("-n", "--name NAME", "用户名") do |n|
    options[:name] = n
  end
  opts.on("-a", "--age AGE", Integer, "年龄") do |a|
    options[:age] = a
  end
  opts.on("-v", "--verbose", "详细输出") do |v|
    options[:verbose] = v
  end
end.parse!
puts options.inspect

Perl

#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long qw(GetOptions);
# 获取命令行参数
print "脚本名: $0\n";
print "所有参数: @ARGV\n";
# 使用 Getopt::Long
my $name = '';
my $age = 0;
my $verbose = 0;
GetOptions(
    'name=s'   => \$name,
    'age=i'    => \$age,
    'verbose'  => \$verbose
) or die "参数错误\n";
print "名称: $name\n" if $name;
print "年龄: $age\n" if $age;
print "详细: $verbose\n" if $verbose;

通用建议

  1. 简单脚本:直接使用位置参数(如 Bash 的 $1, Python 的 sys.argv)
  2. 复杂脚本:使用专门的参数解析库(如 Python 的 argparse, Node.js 的 yargs)
  3. 处理大量参数:使用循环遍历参数
  4. 错误处理:检查必要参数是否存在,提供用法说明

选择哪种方式取决于你的脚本复杂度和使用的编程语言。

抱歉,评论功能暂时关闭!