① 求Bash shell命令
at----安排,检查,删除队列中的工作
cat----连接文件并打印到标准输出
cd----改变目录,能处理绝对和相对路径
chmod----改变文件保护权限
chown----改变文件的属主和组
clear----清除屏幕(象DOS中的cls)
cp----拷贝文件
crontab----操作每个用户的守护程序和执行的时间表
date----打印或设置系统日期和时间
dd----拷贝一个文件(并可以同时转化它)
df----报告磁盘剩余空间
----报告磁盘空间使用情况
file----探测文件和目录类型
find----搜索目录中文件
grep----在文件中搜索匹配的行并输出
gzip----压缩或展开文件
head----显示文件的前几行
history----显示历史命令记录
kill----中止一个进程
last----显示过去多少个用户或终端登录到本机器
less----想对于more命令, 用来按页显示文件
ln----在文件间建立连接
ls----列出当前目录下的文件
man----显示具有一定格式的在线手册
more----命令能逐页阅读文本
mount----安装一个文件系统
mv----将文件改名
passwd----设置用户的密码
ps----命令罗列运行进程
reboot----重新启动系统
rm----命令用于删除文件
su----创建和编辑Unix归档文件
tar----创建和编辑Unix归档文件
touch----改变文件的时间参数
wc----统计一个文件中的字节数,单词数,行数
who----查看其他登录的用户
which----which--显示命令的全路径
ping----命令—确定网络上机器是否可达或到达速率
使用多任务
输出重定向
了解进程
--------------------------------------------------------------------------------
在linux系统中有两种操作界面,分别是:X窗口模式(缺省为KDE)和控制台模式(Console)。两中操作界面类似于Windows和DOS。
如果在X窗口模式下想转变为控制台模式,您只需同时按下Alt+F1(或F2…F6)键,屏幕将会出现新的等录窗口,您可以重新以控制台模式登录系统。如果在控制台模式下,要想返会X窗口模式,需要您同时按下Ctrl+Alt+F7键。
如果没有启动X窗口方式,想从控制台方式中启动X窗口方式,请在控制台方式中输入:startx(或kdm),就可以启动X窗口。
在上面两章中我们已经介绍了X窗口(缺省为KDE)的操作,在本章和下一章中我们将主要讨论控制台模式下的操作,同时也将会间插相应的KDE操作。
6.1 启动和关闭系统
启动系统
如果您在安装过程中已经安装了LILO, 您就可以启动系统,LILO启动时,屏幕显示:
LILO:
单击Tab键,屏幕将显示所有可以启动的操作系统。键入显示的操作系统名,您就可以启动相应操作系统。键入Linux可启动BluePoint Linux&127;系统。如果您直接击回车键或等待5秒钟,同样可以启动BluePoint Linux&127;操作系统。
另一种启动linux系统的方法是:在DOS/WINDOWS系统下运行loadlin.exe。具体使用方法参见相应资料。
登录程序
Linux系统是多用户系统。如果想使用系统,就要鉴别使用者身份进行鉴别,这就是所谓的注册程序。在安装过程中,我们已经创建了叫root超级用户帐号。启动系统后,在登录命令行,键入root,再输入密码("Password")。如果密码正确,登录成功。
建议: 进入系统后建立第二个帐号(非特权用户),以便日常使用。
因为root帐号拥有整个系统的资源所有权,是管理帐号而非工作帐号。
如果您要创建工作帐号,需要两个步骤:
第一步: 创建用户注册帐号。
键入:adsr login_name
其中login_name是您选择的注册帐号(不要使用root)。
第二步: 创建帐号密码。
键入:passwd login_password
其中login_password是您选择的帐号密码(最好不要 和root密码相同)。
如果普通用户要想使用系统的所有特权,使用su命令,并在root命令行中输入 root密码。另外,您还可以使用超级用户模式文件管理器来获取系统资源, 使用方法是:
“K菜单”-->”系统应用”-->”文件管理器(超级用户方式)”
如果您的同事(家庭成员…)要使用您计算机系统,应该为这些用户创建新的用户帐号,而不能将root帐号告诉他们。注意:您要充分利用Linux是多用户操作系统这个优点。
关闭系统
关闭系统的方法有很多,但千万不要直接关断电源!
因为,Linux是使用缓存和磁盘(硬盘,软盘…)来加速输入/输出的;如果直接关断电源,存起来的数据可能没有真正写到磁盘,可能会导致数据丢失。
正确关闭系统是下面几种:
键入/sbin/halt命令(或直接键入halt),等待系统挂起的消息(systemhalted)再关闭系统
快速关闭系统方法是同时按下Ctrl+Alt+Del键(象DOS一样),系统将卸载所有外围设备,并等待计算机重初始化时,再关断电源 。
使用KDM会话。在桌面上任意位置单击右键,选择“注销”。再选择"关闭"系统或"重启"系统。
如果直接关断电源或发生掉电,会出现什么情况呢?Linux重新启系统时会检查未正确卸载的磁盘(fsck 操作)。持续几分钟后。系统可能才会正确启动。
6.2 Linux 的shells
一旦进入系统,您将会看到$的提示符,提示您键入命令。这个等待命令的程序叫shell,其作用是将指令传送给Linux的内核。
Linux系统中有许多不同shell: bash,csh,ksh,tcsh,sh,zsh…..。
在BluePoint Linux&127;系统系统中,shell选用"Bash",因为Bash shell简单并且功能强大。
如果您想知道目前使用的是那种shell,您只要简单键入: echo $SHELL
可以发现系统正在使用的shell类型。
注意:不同的shell有不同的语法。
6.3 使用Bash shell
和DOS系统一样, Linux系统控制台也采用命令行方式。需要在控制台上输入命令,才会执行。
快捷方式
通用的键盘快捷方式是:
. Ctrl+A 到开始行
. Ctrl+U 清除目前行
. Ctrl+C 停止运行的程序
.使用分号能在同一行中键入几个命令。
.上下键能获取命令历史记录。
自动名字补全
在Linux系统下,程序和命令名有时十分长,Bash支持自动名字补全功能。
您开始键入命令名字,再击Tab键,系统将为您自动补全命令或程序或目录名字。
例如: 如果您要使用解压程序bunzip。键入
$bu
接着击Tab键:Bash将显示所有以bu开始的名字。例如:
buildhash buildin bunzip
键入n (bunzip2是唯一名字第三个字符是n),再击Tab键。shell将为您在命令行补全名字,您只要击回车键就可以执行bunzip2命令了。
at命令
at,batch,atq,atrm:安排,检查,删除队列中的工作。
at [-V][-q 队列][-f 文件名][-mlbv ] 时间
at -c 作业 [作业…]
atq [-V] [-q队列][-v]
atrm [-V] 作业 [作业…]
batch [-V] [-q队列] [-f 文件名] [-mv ] [时间]
at在设定时间执行作业。
atq列出用户排在队列中的作业,如果是超级用户,就列出队列中所有的作业。
atrm 删除队列中的作业。
batch 用低优先级运行作业,只要系统的loadavg(系统平均负载)<1.5(或者在atrun中设定的值),它就可开始执行作业。
超级用户可以在任何情况下使用at系列的命令。一般用户使用at系列命令的权限由文件/etc/at.allow,/etc/at.deny控制。如果/etc/at.allow存在,则只有列在这个文件中的用户才能使用at系列命令。如果/etc/at.allow文件不存在,则检查文件/etc/at.deny这个文件。只要不列在这个文件中的用户都可以使用at系列的命令。缺省的配置是文件/etc/at.deny是一个空文件,这表明所有的用户都可以使用a系列的命令。
例如:
在二天后上午8点执行文件workfile中的作业。
[test@bluepoint /]$at -f workfile 8am+2 days
cat命令
cat---连接文件并打印到标准输出。
cat常常用来显示文件,类似于DOS下命令TYPE。
例如:
显示文件file的内容
[test@bluepoint /]$cat file
将file1,file2连接起来输出到文件file3中。
[test@bluepoint /]$cat file1 file2>file3
cd命令
cd---改变目录,能处理绝对和相对路径。
例如:
假如当前在根目录中,想进入etc/子目录。键入(相对目录):
[test@bluepoint /]$cd etc/
如果想进入/usr/bin目录,键入(绝对目录):
[test@bluepoint /]$cd /usr/bin/
此命令一些实用选项是:
回到父目录(注意cd和.. 之间有空格)
[test@bluepoint /]$cd ..
回到目前目录了。
[test@bluepoint /]$cd .
cd ~ 到达个人目录
[test@bluepoint /]$cd ~
chmod命令
chmod-- 改变文件保护权限
文件保护控制用户对文件的访问权,有三个安全级别:所有者级别,组访问级别,其它用户访问级别。在这三个级别中,又有三种权限:读(r),写(w),执行(x)。(用户可以使用ls -lg 命令来观看某一文件的所属的group)。
对于文件来说读权限意味着可以看文件的内容,写文件权可以修改或删除文件,执行权限则可以执行它。对于目录来说,读权限意味可以查看目录下的内容,写权限意味着可以在目录中建立新文件,并可以从目录中删除文件,执行权限意味着可以从一个目录转到另一个目录。
保护权限:格式为[ugoa][[+-=][rwxXstugo…]…][….]"ugoa"控制哪些用户对该文件权限将会改变:(u)文件的所有者,(g)与文件所有者同组的用户,(0)其它组的用户,(a)所有用户。操作符"+"使得用户权限被追加到每个目录文件。操作符"-"使得用户权限被取消,操作符"="使用户只有这些权限。"rwxXstugo"选择新的属性:(r)读权限(w)写权限(x)执行权限(和对目录的访问权)(X)只有目标文件对某些用户是可执行的或该目标文件是目录时才追加X属性(s)同时设定用户或组ID(t)保存程序的文本到交换设备上(u)目标文件属主(g)目标文件属主所在的组(o)其它用户。如果数字来表示属性,则(0)没有权限(1)执行权(2)读权(4)写权,然后相加,所以数字属性的格式应为3个0到7的八进制数,其顺序是(u)(g)(o)文件名:以空格分开的要改变权限的文件列表,支持通配符。
范例:
使所有用户对文件testfile有执行权
[test@bluepoint /]$chmod a+x testfile
使所有用户对文件testfile读权
[test@bluepoint /]$chmod 222 testfile
chown 命令
chown --改变文件的属主和组。
用户:可以是用户名或用户ID。
组:可以是组名或组的ID。
文件名:以空格分开的要改变权限的文件列表,支持通配符。
例如:
[test@bluepoint /]$ chown host:test file1
将文件file1的属主改为host组的test。
clear命令
clear--清除屏幕(象DOS中的cls)。
例如:
[test@bluepoint /] $clear
清除屏幕,提示符将被移到左上角。
cp 命令
cp--拷贝文件
用法:
cp [options] 源文件 目标文件
选项:
-f,--force:强行覆盖已存在的目标文件
-i,-interactive:在强行覆盖已存在的目标文件时给出提示。
-R,--recursive:整个目录拷贝。
例如:
[test@bluepoint /]cp sourcefile destfile
拷贝文件sourcefile到文件destfile。
crontab命令
crontab--操作每个用户的守护程序和执行的时间表。
crontab file [-u user]--用指定的文件替代目前的crontab。
crontab - [-u user]--用标准输入替代目前的crontab。
crontab -l [user]--列出用户目前的crontab。
crontab -e [user]--编辑用户目前 的crontab 。
crontab -d [user]--删除用户目前 的crontab 。
crontab -c dir --指定crontab的目录。
crontab文件的格式:M H D m d cmd
M:分钟(0-59)
H:小时(0-23)
D:天(1-31)
m:月份(1-12)
d:一星期内的天(0-6,0为星期天)
cmd:要运行的程序,程序被送入shell执行,这个shell只有USER,HOME,SHELL三个环境变量。
例如:
列出用户目前的crontab
[test@bluepoint /]$crontab -l
$MIN HOUR DAY MOUTH DAYOFWEEK COMMAND
8 6 * * * clear
[test@bluepoint /]$
date命令
date--打印或设置系统日期和时间
date [-u] [-d datestr] [-s datestr] [--utc][--universal][--date=datestr][--set=datestr] [--help][--version][+FORMAT][MMDDhhmm[[CC]YY][。ss]]
+FORMAT:控制如何显示日期。
指令: % :%号
n:新行
t:TAB
时间域
%H 小时 (00..23)
%l 小时 (00..12)
%k 小时 (0..23)
%l 小时 (1..12)
%M 小时 (00..59)
%p AM或者PM
%r
② badboy脚本中,迭代时多个参数的值如何同时变化
之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互。
bash shell提供了命令行参数添加在命令后面的数据值)、命令行选项修改命令行为的单字符值)和直接读取键盘输入。
1、命令行参数
向shell脚本传递数据的最基本方式是使用命令行参数。
1)读取参数
读取输入的参数的变量为位置参数,位置参数通过标准数字表示,
其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。
shell脚本自动将命令行参数赋值给各个位置变量。
同时输入多个参数可以是数值也可以是字符串)时,必须使用空格分隔要想在参数值中包含空格,就必须使用单引号或双引号)
当参数多于9个后,必须在shell脚本内使用大括号将变量括起来,如${10}。从而可以使用任意个参数。
2)读取程序名称
传递给变量$0的字符串实际上是程序的路径根据调用方法决定是相对还是绝对路径)。
使用basename命令可以去掉路径前缀,只获得程序名称名字中不 可以有空格)。
3)测试脚本
当脚本认为应该包含参数,却实际上没有数据时,就会出错。
好的方法是对参数进行检查来保证使用参数前确实存在数据,可以使用-n参数来检查。
例子:if [ –n “$1” ] then .. else .. fi
2、特殊的参数变量
用于跟踪命令行参数
1)参数计数
使用特殊变量$#测试执行脚本时包含的命令行参数个数。脚本中任何位置都可以 使用$#
例子:if [ $# –ne 2 ] 即可测试参数个数
可以使用${!#}来返回最后一个命令行参数当无参数时,$#为0,而${!#}为程序名)
2)获取所有数据
变量$*将命令行中提供的所有参数作为一个单词处理,它将多个参数看成 一个参数。
变量$@将命令行中提供的所有参数作为同一个字符串中的多个单词处理。 允许对其中的值进行迭代一般使用for),分隔开不同参数
3、移位
shift命令能够改变命令行参数的相对位置。默 认将每个参数变量左移一个位置变量$0不变,把$1丢弃,注意不可以恢复了!)
在不清楚参数数目情况下,这是一个迭代参数的好办法。
可以为shift提供一个参数,来实现多位移变化。
4、处理选项
选项是由破折号引导的单个字母,用于更改命令的行为。
1,找出选项
1)处理简单选项
可以使用处理命令行参数相同的方法处理选项,抽取时使用case语句进行判断是否符合选项格式。
2)从参数中分离选项
同时使用选项和参数时,可以使用--指示选项列表的结束。发现--后,shell就知道后面的是普通参数了,停止使用case处理选项。
3)处理带值的选项
选项后紧跟参数值,一种方法是在case中对应选项后使用shift和读后一位参数的方法处理。更好的方法如 下:
2,使用getopt命令
getopt命令在处理选项和参数时非常方便。它对参数进行重新组 织,以便于解析
1)命令格式
getopt可以接受任意形式的选项和参数列表,并自动将它们转换为适当的格式。
命令格式为: getopt options optstring parameters
选项字符串(opstring)用于定义命令行中的有效选项字母,以及哪些选项字母需要参数值。
2)脚本中使用getopt
需要使用set命令将现有的命令行选项和参数替换为getopt命令生成的 格式化形式。
需要将原始脚本命令行参数送给getopt命令,然后将getopt命令输出送给set命令,如下:set – `getopts –q ab:cd “$@”`
但是getopt命令不能很好的处理带有空格的参数值,它将空格解析为参数分隔符,而不是将双引号引起来的两个 值合并成一个参数。解决办法如下:
3)更高级的getopts命令
getopts命令顺序的对现有的shell参数变量进行处理,每调用一次,只处理命令中检测到的参数中的一个。处理完所有参数后,以大于0的退出 状态退出。
非常适宜于在循环中解析所有命令行参数
格式为: getopts optstring variable
$optarg包含需要参数值的选项要使用的值,$optind包含getopts停止处理时在参数列表中的位置。
③ 编写一个shell脚本程序,它带一个命令行参数,这个参数是一个文件。
#!/bin/bash
#脚本名称假设为:test.sh
if [[ $# -ne "1" || ! -f $* ]];then
echo "Usage:./test.sh 参数(请输入普通文件名)"
exit 1
fi
uname=$(ls -l $1 | awk '{print $3}')
ctime=$(ls -l $1 --full-time | awk '{print $6}')
echo "所有者为:$uname"
echo "最后修改的日期:$ctime"
④ 使用bash脚本,使用for循环和arg参数编写一个实现将命令行的多个参数逆序输出的程序
脚本自己写了一个,可能不完全符合条件2要求(cmd变量没用上),但是逆序打印词串大概没问题,你自己试下:
#!/bin/bash
count=$#
for arg in $*
do
echo -n "${count} "
let "count=count-1"
done
第一个问题的答案:vi,或者你写vim也对,一般vi是vim的链接,运行命令行下的vi编辑器。
第二个问题没看明白要cmd这个变量啥用,可能是我愚钝,我不知道怎样重定向一个字符串追加到一个变量的末尾,想了个变通的方法。
第三个问题的答案:chmod 0750 /<到脚本位置的绝对路径>/<脚本文件名>
第四个问题的答案:你把这串字符按照空格隔开为一个单元的规律倒序写即可,就是这样ddff gdd ddd ac ab aa
⑤ 在bash shell里 $0 $ $* $@ 各表示什么意思
$0就是该bash文件名,
$?是上一指令的返回值,
$*所有位置参数的内容:就是调用调用本bash shell的参数。
$@基本上与上面相同。
“$*”返回的是一个字符串,字符串中存在多外空格。
“$@”返回多个字符串。
(5)bash命令行参数扩展阅读:
bash shell 的内置命令: type
语法:type [-tpa] name
参数:
type: 不加任何参数时, type会显示name是外部命令还是bash内置命令
-t: 当加入-t 参数时, type会将name以下面这些字眼显示出它的意义:
file:表示为外部命令;
alias: 表示该命令为命令别名所设置的名称
builtin : 表示该命令为bash内置的命令功能
-p: 如果后面接的name为外部命令时, 才会显示完整文件名
-a :会由PATH变量定义的路径中,将所有含name的命令都列出来,包含alias
type主要在找出“执行文件”而不是一般文件名。所以,这个type也可以用来作为类似which命令的用途。
⑥ Bash cp 命令参数引用变量,求指教
cp $c ~/Desktop/B/ 改成 cp "$c" ~/Desktop/B/
⑦ bash命令行中带通配符参数何时展开
非常奇妙的问题,答案同样也很有趣(蛋疼。。。) “ 当使用类似于[a-z]的范围表达式时,取决于LC_COLLATE设置的不同,可能会包含大写字母。” 你可以测试以下命令(我用 bash 4.3.11 测试过): $ touch a A b B c C x X y Y z Z$ lsa A b B c C ...
⑧ linux中设计一个shell脚本程序可以接受命令行输入的参数执行相应的菜单命令
echo "------------------------"
echo "1、命令1"
echo "2、命令2"
echo "3、命令3"
echo "------------------------"
echo "请输入要执行的菜单命令(1/2/3):"
read com
case $com in
1)
命令1
;;
2)
命令2
;;
3)
命令3
;;
*)
echo "输入命令错误"
;;
⑨ 能把这个linux shell命令的每个参数给解释一下么
问题描述:在linux shell中如何处理tail -n 10 access.log这样的命令行选项?
在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景。
1,直接处理,依次对$1,$2,...,$n进行解析,分别手工处理;
2,getopts来处理,单个字符选项的情况(如:-n 10 -f file.txt等选项);
3,getopt,可以处理单个字符选项,也可以处理长选项long-option(如:--prefix=/home等)。
总结:小脚本手工处理即可,getopts能处理绝大多数的情况,getopt较复杂、功能也更强大。
1,直接手工处理位置参数
必须要要知道几个变量,
复制代码代码如下:
* $0 :即命令本身,相当于c/c++中的argv[0]
* $1 :第一个参数.
* $2, $3, $4 ... :第2、3、4个参数,依次类推。
* $# 参数的个数,不包括命令本身
* $@ :参数本身的列表,也不包括命令本身
* $* :和$@相同,但"$*" 和 "$@"(加引号)并不同,"$*"将所有的参数解释成一个字符串,而"$@"是一个参数数组。
手工处理方式能满足多数的简单需求,配合shift使用也能构造出强大的功能,但处理复杂选项时建议用下面的两种方法。
例子,(getargs.sh):
复制代码代码如下:
#!/bin/bash
if [ $# -lt 1 ]; then
echo "error.. need args"
exit 1
fi
echo "commond is $0"
echo "args are:"
for arg in "$@"
do
echo $arg
done
运行命令:
复制代码代码如下:
./getargs.sh 11 22 cc
commond is ./getargs.sh
args are:
11
22
cc
2,getopts (shell内置命令)
处理命令行参数是一个相似而又复杂的事情,为此,c提供了getopt/getopt_long等函数,c++的boost提供了options库,在shell中,处理此事的是getopts和getopt。
getopts/getopt的区别,getopt是个外部binary文件,而getopts是shell builtin。
复制代码代码如下:
[root@jbxue ~]$ type getopt
getopt is /usr/bin/getopt
[root@jbxue ~]$ type getopts
getopts is a shell builtin
getopts不能直接处理长的选项(如:--prefix=/home等)
关于getopts的使用方法,可以man bash 搜索getopts
getopts有两个参数,第一个参数是一个字符串,包括字符和“:”,每一个字符都是一个有效的选项,如果字符后面带有“:”,表示这个字符有自己的参数。getopts从命令中获取这些参数,并且删去了“-”,并将其赋值在第二个参数中,如果带有自己参数,这个参数赋值在“optarg”中。提供getopts的shell内置了optarg这个变变,getopts修改了这个变量。
这里变量$optarg存储相应选项的参数,而$optind总是存储原始$*中下一个要处理的元素位置。
while getopts ":a:bc" opt #第一个冒号表示忽略错误;字符后面的冒号表示该选项必须有自己的参数
例子,(getopts.sh):
复制代码代码如下:
echo $*
while getopts ":a:bc" opt
do
case $opt in
a ) echo $optarg
echo $optind;;
b ) echo "b $optind";;
c ) echo "c $optind";;
? ) echo "error"
exit 1;;
esac
done
echo $optind
shift $(($optind - 1))
#通过shift $(($optind - 1))的处理,$*中就只保留了除去选项内容的参数,可以在其后进行正常的shell编程处理了。
echo $0
echo $*
执行命令:
复制代码代码如下:
./getopts.sh -a 11 -b -c
-a 11 -b -c
11
3
b 4
c 5
5
./getopts.sh
3,getopt(一个外部工具)
具体用用法可以 man getopt
#-o表示短选项,两个冒号表示该选项有一个可选参数,可选参数必须紧贴选项,如-carg 而不能是-c arg
#--long表示长选项
例子,(getopt.sh):
复制代码代码如下:
#!/bin/bash
# a small example program for using the new getopt(1) program.
# this program will only work with bash(1)
# an similar program using the tcsh(1) script. language can be found
# as parse.tcsh
# example input and output (from the bash prompt):
# ./parse.bash -a par1 'another arg' --c-long 'wow!*\?' -cmore -b " very long "
# option a
# option c, no argument
# option c, argument `more'
# option b, argument ` very long '
# remaining arguments:
# --> `par1'
# --> `another arg'
# --> `wow!*\?'
# note that we use `"$@"' to let each command-line parameter expand to a
# separate word. the quotes around `$@' are essential!
# we need temp as the `eval set --' would nuke the return value of getopt.
#-o表示短选项,两个冒号表示该选项有一个可选参数,可选参数必须紧贴选项
#如-carg 而不能是-c arg
#--long表示长选项
#"$@"在上面解释过
# -n:出错时的信息
# -- :举一个例子比较好理解:
#我们要创建一个名字为 "-f"的目录你会怎么办?
# mkdir -f #不成功,因为-f会被mkdir当作选项来解析,这时就可以使用
# mkdir -- -f 这样-f就不会被作为选项。
temp=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \
-n 'example.bash' -- "$@"`
if [ $? != 0 ] ; then echo "terminating..." >&2 ; exit 1 ; fi
# note the quotes around `$temp': they are essential!
#set 会重新排列参数的顺序,也就是改变$1,$2...$n的值,这些值在getopt中重新排列过了
eval set -- "$temp"
#经过getopt的处理,下面处理具体选项。
while true ; do
case "$1" in
-a|--a-long) echo "option a" ; shift ;;
-b|--b-long) echo "option b, argument \`$2'" ; shift 2 ;;
-c|--c-long)
# c has an optional argument. as we are in quoted mode,
# an empty parameter will be generated if its optional
# argument is not found.
case "$2" in
"") echo "option c, no argument"; shift 2 ;;
*) echo "option c, argument \`$2'" ; shift 2 ;;
esac ;;
--) shift ; break ;;
*) echo "internal error!" ; exit 1 ;;
esac
done
echo "remaining arguments:"
for arg do
echo '--> '"\`$arg'" ;
done
运行命令:
复制代码代码如下:
./getopt.sh --b-long abc -a -c33 remain
option b, argument `abc'
option a
option c, argument `33'
remaining arguments:
--> `remain'
以上提供参考学习,谢谢!
⑩ 使用bash脚本,编写一个实现将命令行的多个参数逆序输出的程序。
i=$#
while[$i-gt0]
do
eval"echo$$i"
i=$((i-1))
done