Linux基本命令+shell脚本-基础知识

Linux 基础命令

Linux 基础命令

1.ps -ef|grep //可查看包含关键字的进程

eg: ps -ef|grep progressName // 查看progressName进程的信息

  1. ps为process status的简称,意为进程状态,-ef为ps的参数,ps的参数如下所示:
    -e : 显示所有进程
    -f : 全格式
    -h : 不显示标题
    -l : 长格式
    -w : 宽输出
    a :显示终端上的所有进程,包括其他用户的进程。
    r :只显示正在运行的进程。
    u :以用户为主的格式来显示程序状况。
    x :显示所有程序,不以终端机来区分

相关字段含义如下:

字段含义
UID程序被该 UID 所拥有
PID程序的 ID
PPID上级父程序的ID
CCPU使用的资源百分比
STIME系统启动时间
TTY登入者的终端机位置
TIME使用掉的CPU时间
CMD登入者的终端机位置,所下达的指令
  1. |符号是管道符号,表示ps和grep同时执行,ps的输出作为grep的输入。

  2. grep全称为global regular expression print,可以通过正则表达式搜索文本,并且将搜索结果输出。

2.shell脚本(shell script),是一种为 shell 编写的脚本程序

概念:Shell 是用 C 语言编写的程序,是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言;是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。比如,Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

1)新建.sh脚本文件

打开文本编辑器(使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行

#!/bin/bash
echo "Hello World !"

#! 约定的标记,告诉系统告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序
echo 命令用于向窗口输出文本

2)运行 Shell 脚本有两种方法:

  • 作为可执行程序,将上面的代码保存为 test.sh,并 cd 到相应目录:
chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

注意,一定要写成 ./test.sh(告诉系统在当前目录找),而不是test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的。

  • 作为解释器参数
    这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:
/bin/sh test.sh
/bin/php test.php

这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用

3)Shell 变量:

  • 定义变量
    变量名不加美元符号($,PHP语言中变量需要)
your_name="qqqq"  // 注:变量名和等号之间不能有空格

命名规则:
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线 _。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)

除了显式地直接赋值,还可以用语句给变量赋值,如:

// 将 /etc 下目录的文件名循环出来
for file in `ls /etc`for file in $(ls /etc)

shell编程中最常用最有用的数据类型:除了数字和字符串

字符串:可用单引号、双引号或不用引号

//单引号
str='this is a string'  
// 双引号 
your_name="rrrrr"
str="Hello, I know you are \"${your_name}\"! \n"
echo -e $str   // 输出结果为:Hello, I know you are "rrrrr"! 

//拼接字符串
your_name="1111"
//使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3  // 输出结果为:hello, 1111! hello, ${your_name} !
//使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1   // 输出结果为:hello, 1111! hello, 1111!

//获取字符串长度
string="abcd"
echo ${#string}   // 输出 4
echo ${#string[0]} // 输出 4 变量为数组时,${#string} 等价于 ${#string[0]}:

//提取子字符串
string="runoob is a great site"
echo ${string:1:4} // 输出 unoo  从字符串第2个字符开始截取4个字符, 注意:第一个字符的索引值为 0

//查找子字符串
//查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
string="runoob is a great site"
echo `expr index "$string" io`  // 输出 4  注意: 使用的是 ` 是反引号

单引号字符串的限制:
1>单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
2>单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号的优点:
1>双引号里可以有变量
2>双引号里可以出现转义字符

数组:bash支持一维数组(不支持多维数组),且没有限定数组的大小。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。类似于 C 语言,数组元素的下标由 0 开始编号,且初始化时不需要定义数组大小

在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

1.定义数组:
//方法一:数组名=(值1 值2 ... 值n)   用括号来表示,元素用"空格"符号分割开
array_name=(value0 value1 value2 value3)

//方法二:
array_name=(
value0
value1
value2
value3
)

//方法三:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen   // 可不使用连续的下标,且下标的范围没有限制

2.读取数组 ${数组名[下标]}
valuen=${array_name[index]}
echo ${array_name[@]}  //使用 @ 符号可以获取数组中的所有元素

3.获取数组的长度
//取得数组元素的个数
//方法一:
length=${#array_name[@]}
//方法二:
length=${#array_name[*]}

//取得数组单个元素的长度
lengthn=${#array_name[n]}

4.关联数组 使用 declare 命令来声明
declare -A array_name // -A 选项就是用于声明一个关联数组, 关联数组的键是唯一的

// 建一个关联数组 site,并创建不同的键值
declare -A site=(["google"]="www.google.com" ["runoob"]="www.runoob.com" ["taobao"]="www.taobao.com")

//先声明一个关联数组,然后再设置键和值
declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

//4.1访问关联数组元素使用指定的键,格式如下:
array_name["index"]

//通过键来访问关联数组的元素:
declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

echo ${site["runoob"]}  //执行脚本,输出结果: www.runoob.com

//4.2获取数组中的所有元素和所有键:
//使用 @ 或 * 可以获取数组中的所有元素;在数组前加一个感叹号 ! 可获取数组的所有键
//例子1
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D

echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
//执行脚本,输出结果如下所示:
$ chmod +x test.sh 
$ ./test.sh
数组的元素为: A B C D
数组的元素为: A B C D
//例子2
declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

echo "数组的元素为: ${site[*]}"
echo "数组的元素为: ${site[@]}"
//执行脚本,输出结果如下所示:
$ chmod +x test.sh 
$ ./test.sh
数组的元素为: www.google.com www.runoob.com www.taobao.com
数组的元素为: www.google.com www.runoob.com www.taobao.com
//例子3
declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

echo "数组的键为: ${!site[*]}"
echo "数组的键为: ${!site[@]}"
//执行脚本,输出结果如下所示:
数组的键为: google runoob taobao
数组的键为: google runoob taobao

5.获取数组的长度
//获取数组长度的方法与获取字符串长度的方法相同
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D

echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"
//执行脚本,输出结果如下所示
$ chmod +x test.sh 
$ ./test.sh
数组元素个数为: 4
数组元素个数为: 4

变量类型
运行shell时,会同时存在三种变量:
1> 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2> 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3> shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

  • 使用变量
    使用一个已定义的变量,则在变量名前面加美元符号即可,最好给所有变量加上花括号(推荐)
your_name="11111"
echo $your_name    //方法一
echo ${your_name}  //方法二,还可帮助解释器识别变量的边界--推荐使用

//若skill变量没有加花括号,结果为echo "I am good at $skillScript",解释器将$skillScript当成一个变量(其值为空)
for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done
  • 已定义的变量再次赋值
your_name="1111"
echo $your_name
your_name="22222"
echo $your_name  // 使用变量的时候才加美元符($)
  • 只读变量
    使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
#!/bin/bash

myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.runoob.com"

运行脚本,结果如下:
/bin/sh: NAME: This variable is read only.

  • 删除变量
    使用 unset 命令可以删除变量。语法:
#!/bin/bash
unset your_name  // 变量被删除后不能再次使用

注:unset 命令不能删除只读变量。

#!/bin/sh

myUrl="https://www.runoob.com"
unset myUrl
echo $myUrl   // 执行将没有任何输出

4)Shell 基本运算符

支持多种运算符,包括:
算数运算符
关系运算符
布尔运算符
字符串运算符
文件测试运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

  • 算术运算符
#!/bin/bash

val=`expr 2 + 2`
echo "两数之和为 : $val"
// 执行脚本,输出结果如下所示:
两数之和为 : 4

两点注意:
1>表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2
2>完整的表达式要被 `` (非单引号,为)包含,在 Esc 键下边

字段含义举例
+加法expr $a + $b 结果为 30
-减法expr $a - $b 结果为 -10
*乘法expr $a \* $b 结果为 200
/除法expr $b / $a 结果为 2
%取余expr $b % $a 结果为 0
=赋值a=$b 把变量 b 的值赋给 a
==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false
!=不相等。用于比较两个数字,不相同则返回 true[ $a == $b ] 返回true

注意:条件表达式要放在方括号之间,并且要有空格,例如: [ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi
//执行脚本,输出结果如下所示:
a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a 不等于 b

注意:
乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
if...then...fi 是条件语句,后续将会讲解。
在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "\" 
  • 关系运算符
    关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
运算符含义举例
-eq检测两个数是否相等,相等返回 true[ $a -eq $b ] 返回 false
-ne检测两个数是否不相等,不相等返回 true[ $a -ne $b ] 返回 true
-gt检测左边的数是否大于右边的,如果是,则返回 true[ $a -gt $b ] 返回 false
-lt检测左边的数是否小于右边的,如果是,则返回 true[ $a -lt $b ] 返回 true
-ge检测左边的数是否大于等于右边的,如果是,则返回 true[ $a -ge $b ] 返回 fals
-le检测左边的数是否小于等于右边的,如果是,则返回 true[ $a -le $b ] 返回 true
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

a=10
b=20

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
   echo "$a -lt $b: a 小于 b"
else
   echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi
//执行脚本,输出结果如下所示:
10 -eq 20: a 不等于 b
10 -ne 20: a 不等于 b
10 -gt 20: a 不大于 b
10 -lt 20: a 小于 b
10 -ge 20: a 小于 b
10 -le 20: a 小于或等于 b
  • 布尔运算符
    下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:
运算符含义举例
!非运算,表达式为 true 则返回 false,否则返回 true[ ! false ] 返回 true
-o或运算,有一个表达式为 true 则返回 true[ $a -lt 20 -o $b -gt 100 ] 返回 true
-a与运算,两个表达式都为 true 才返回 true[ $a -lt 20 -a $b -gt 100 ] 返回 false
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

a=10
b=20

if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a == $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
   echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
   echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
   echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
   echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
   echo "$a 小于 5 或 $b 大于 100 : 返回 true"
else
   echo "$a 小于 5 或 $b 大于 100 : 返回 false"
fi

//执行脚本,输出结果如下所示
10 != 20 : a 不等于 b
10 小于 10020 大于 15 : 返回 true
10 小于 10020 大于 100 : 返回 true
10 小于 520 大于 100 : 返回 false
  • 逻辑运算符
    Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:
运算符说明举例
&&逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]]返回 false
||逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]]返回 true
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

a=10
b=20

if [[ $a -lt 100 && $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

if [[ $a -lt 100 || $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

//执行脚本,输出结果如下所示:
返回 false
返回 true
  • 字符串运算符
    下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:
运算符说明举例
=检测两个字符串是否相等,相等返回 true[ $a = $b ] 返回 false
!=检测两个字符串是否不相等,不相等返回 true[ $a != $b ] 返回 true
-z检测字符串长度是否为0,为0返回 true[ -z $a ] 返回 false
-n检测字符串长度是否不为 0,不为 0 返回 true[ -n “$a” ] 返回 true
$检测字符串是否不为空,不为空返回 true[ $a ] 返回 true
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

a="abc"
b="efg"

if [ $a = $b ]
then
   echo "$a = $b : a 等于 b"
else
   echo "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
if [ -z $a ]
then
   echo "-z $a : 字符串长度为 0"
else
   echo "-z $a : 字符串长度不为 0"
fi
if [ -n "$a" ]
then
   echo "-n $a : 字符串长度不为 0"
else
   echo "-n $a : 字符串长度为 0"
fi
if [ $a ]
then
   echo "$a : 字符串不为空"
else
   echo "$a : 字符串为空"
fi

//执行脚本,输出结果如下所示:
abc = efg: a 不等于 b
abc != efg : a 不等于 b
-z abc : 字符串长度不为 0
-n abc : 字符串长度不为 0
abc : 字符串不为空
  • 文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性

操作符说明举例
-b file检测文件是否是块设备文件,如果是,则返回 true[ -b $file ] 返回 false。
-c file检测文件是否是字符设备文件,如果是,则返回 true[ -c $file ] 返回 false。
-d file检测文件是否是目录,如果是,则返回 true[ -d $file ] 返回 false。
-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true[ -f $file ] 返回 true。
-g file检测文件是否设置了 SGID 位,如果是,则返回 true[ -g $file ] 返回 false。
-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true[ -k $file ] 返回 false。
-p file检测文件是否是有名管道,如果是,则返回 true[ -p $file ] 返回 false。
-u file检测文件是否设置了 SUID 位,如果是,则返回 true[ -u $file ] 返回 false。
-r file检测文件是否可读,如果是,则返回 true[ -r $file ] 返回 true。
-w file检测文件是否可写,如果是,则返回 true[ -w $file ] 返回 true。
-x file检测文件是否可执行,如果是,则返回 true[ -x $file ] 返回 true。
-s file检测文件是否为空(文件大小是否大于0),不为空返回 true[ -s $file ] 返回 true。
-e file检测文件(包括目录)是否存在,如果是,则返回 true[ -e $file ] 返回 true。

其他检查符:
-S: 判断某文件是否 socket。
-L: 检测文件是否存在并且是一个符号链接。

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

file="/var/www/runoob/test.sh"
if [ -r $file ]
then
   echo "文件可读"
else
   echo "文件不可读"
fi
if [ -w $file ]
then
   echo "文件可写"
else
   echo "文件不可写"
fi
if [ -x $file ]
then
   echo "文件可执行"
else
   echo "文件不可执行"
fi
if [ -f $file ]
then
   echo "文件为普通文件"
else
   echo "文件为特殊文件"
fi
if [ -d $file ]
then
   echo "文件是个目录"
else
   echo "文件不是个目录"
fi
if [ -s $file ]
then
   echo "文件不为空"
else
   echo "文件为空"
fi
if [ -e $file ]
then
   echo "文件存在"
else
   echo "文件不存在"
fi

// 执行脚本,输出结果如下所示:
文件可读
文件可写
文件可执行
文件为普通文件
文件不是个目录
文件不为空
文件存在

5) Shell 注释:

单行注释:以 # 开头的行就是注释,会被解释器忽略
多行注释:1)通过每一行加一个 # 号设置多行注释 2) 如下:

:<<EOF
注释内容...
注释内容...
注释内容...
EOF
//EOF 也可以使用其他符号:
:<<'
注释内容...
注释内容...
注释内容...
'

:<<!
注释内容...
注释内容...
注释内容...
!

6)Shell 传递参数

在执行 Shell 脚本时,可向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
以下实例向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径):

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

// 为脚本设置可执行权限,并执行脚本,输出结果如下所示:
$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
字段含义
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$ ∗ 相同,但是使用时加引号,并在引号中返回每个参数。如 " *相同,但是使用时加引号,并在引号中返回每个参数。如" 相同,但是使用时加引号,并在引号中返回每个参数。如"@“用「”」括起来的情况,以"$1"" 2 " . . . " 2"..." 2"..."n"的形式输出所有参数
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

$* 与 $@ 区别:
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

echo "-- \$* 演示 ---"
for i in "$*"; do
    echo $i
done

echo "-- \$@ 演示 ---"
for i in "$@"; do
    echo $i
done

//执行脚本,输出结果如下所示:
$ chmod +x test.sh 
$ ./test.sh 1 2 3
-- $* 演示 ---
1 2 3
-- $@ 演示 ---
1
2
3

7)Shell export命令

在Shell脚本中,export命令用于将一个变量或函数设置为环境变量,使其在当前Shell会话中的所有子进程中都可用。当一个变量被设置为环境变量时,它将被传递给任何由当前Shell启动的子进程,包括其他Shell脚本和命令行工具。
例如,如果在Shell脚本中使用export命令将变量MY_VAR设置为环境变量:

export MY_VAR="Hello World"

那么在当前Shell会话中启动的任何子进程都可以访问这个变量:

echo $MY_VAR

输出:

Hello World

需要注意的是,export命令只能将变量设置为环境变量,而不能将函数设置为环境变量。

8)Shell getopts命令

getopts是一个用于解析命令行选项的shell内置命令。它可以帮助脚本编写者处理命令行参数,包括选项和参数。getopts命令通常与while循环结合使用,用于逐个处理命令行选项和参数。

getopts命令的语法如下:

getopts optstring name [args]

其中,optstring是一个包含所有可用选项的字符串,每个选项前面可以加一个冒号表示该选项需要一个参数。name是一个变量名,用于存储当前处理的选项。args是一个或多个要解析的参数。
在脚本中,可以使用类似下面的代码来处理命令行选项:

while getopts ":a:b:" opt; do
  case $opt in
    a)
      echo "Option a has been set with value $OPTARG"
      ;;
    b)
      echo "Option b has been set with value $OPTARG"
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

在这个例子中,optstring是"🅰️b:",表示有两个选项a和b,其中a需要一个参数,b不需要参数。在while循环中,getopts命令会逐个处理命令行选项,并将当前选项存储在变量opt中。在case语句中,根据不同的选项进行相应的处理。如果遇到无效选项或缺少参数的选项,会输出错误信息并退出脚本。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值