ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

shell命令行的选项和参数是如何处理的?

2021-12-30 17:01:58  阅读:176  来源: 互联网

标签:选项 count shell name str1 echo 参数 命令行 bash


当你使用一个命令时,通过--help就可以看到有很多种功能。

例如ls

当你敲下

ls -a

ls -lths

... 这都是如何解析的呢?

mysql命令 多数选项是包含参数的,这又是如何解析的呢?

位置参数

位置参数变量是标准的数字: $0是程序名, $1是第一个参数, $2是第二个参数,依次类推,直到第九个参数$9。

如果超过10个参数,必须在变量数字周围加上花括号,比如${10}

例如:

#/bin/bash

total=$[ ${10} * ${11} ]
echo "The tenth parameter is ${10}"
echo "The 11th parameter is ${11}"
echo "Total is $total"

 读取脚本名

echo "The shell name is $0"

 看起来有点别扭,如何脚本的运行路径给剥离掉?

basename命令会返回不包含路径的脚本名。

#/bin/bash
name=$(basename $0)
echo "The shell name is: $0"
echo "The shell name is: $name"


基于脚本名执行不同功能的脚本

#!/bin/bash

name=$(basename $0)

if [ $name = "addem" ];then
	total=$[ $1 + $2 ]
elif [ $name = "multem" ];then
	total=$[ $1 * $2 ]
fi
echo 
echo Toal is : $total

结果:  

特殊的变量参数 

当漏掉一个参数的时候,会报错。如何引导使用脚本的人正确使用呢?

chapter14]# bash multem 10 
multem: line 8: 10 *  : syntax error: operand expected (error token is "*  ")

Toal is :

结果:

如果是只有一个字符串参数,可以使用-n 判断该字符串是否为空。 

if [ str1 = str2 ]       当两个串有相同内容、长度时为真 (等号两边有空格)
if [ str1 != str2 ]      当串str1和str2不等时为真 
if [ -n str1 ]       当串的长度大于0时为真(串非空) 
if [ -z str1 ]        当串的长度为0时为真(空串) 
if [ str1 ]         当串str1为非空时为真

 获取变量列表的最后一个参数:

${!#}

不是${$#}

#!/bin/bash
# date 2021年12月30日11:00:12
# desc 位置参数
parameter=$#

echo "The Total parameters is: $#"
echo "The last parameters is: ${!#}"
echo "The last parameters is: ${$#}"

$#的值为0,params变量的值也一样,但${!#}变量会返回命令行用到的脚本名

 

$@和#*的区别?

$*变量会将命令行上提供的所有参数当作一个单词保存
$@变量会将命令行上提供的所有参数当作同一字符串中的多个独立的单词。

看一个例子就清楚了

#!/bin/bash
# test $@ and $*

#echo "output \$*: $*"
#echo "output \$@: $@"

count=1
for item in "$*";do
        echo "\$* Item #$count: $item"
        count=$[ $count + 1 ]
done
echo
count=1
for item in "$@";do
        echo "\$@ Item #$count: $item"
        count=$[ $count + 1 ]
done
~                                                                                                 
~            

shift移动命令

要点:

  1. 默认情况下它会将每个参数变量向左移动一个位置(可以使用shift n 每次移动n个位置)
  2. 例如变量$2的值会移到$1中,而变量$1的值则会被删除。
     

在不知道参数数量的前提下如何遍历参数列表?

使用shift只操作第一个参数,移动参数,然后继续操作第一个参数。

#!/bin/bash
count=1

while [ -n "$1" ];do
        echo "paramerer #$count: $1"
        count=$[ $count + 1 ]
        shift
done
~       

标签:选项,count,shell,name,str1,echo,参数,命令行,bash
来源: https://blog.csdn.net/MyySophia/article/details/122230758

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有