Linux 操作系统shell学习笔记 (linux系统)
- 格式:doc
- 大小:115.50 KB
- 文档页数:20
shell编程学习笔记(四):Shell中转义字符的输出
通过echo可以输出字符串,下⾯看⼀下怎么输出特殊转义字符,⾸先我先列出来echo的转义字符:
\\ 输⼊\
\a 输出警告⾳
\b 退格,即向左删除⼀个字符
\c 取消输出⾏末的换⾏符,和-n选项⼀致
\e Esc
\f 换页符
\n 换⾏
\r 回车
\t 制表,即Tab
\v 垂直制表符
\0nnn 按照⼋进制ASCII码表输出字符,其中0为数字零,nnn是三位⼋进制数
\xhh 按照⼗六进制ASCII码表输出字符,其中hh是两位⼗六进制数
以下蓝⾊字体部分为Linux命令,红⾊字体的内容为输出的内容:
# cd /opt/scripts
# vim script04.sh
开始编写script04.sh的脚本,脚本内容为:
#! /bin/sh
echo -e "hello world\nhello\n"
echo -e -n "hello\n"
echo -e "this is a new line.\n"
# chmod +x script04.sh
# ./script04.sh
hello world
hello
hello
this is a new line.
上⾯的代码⽐较简单,我主要说⼀下echo后⾯带的选项:
-e 必须添加-e选项,输出的内容才⽀持转义输出
-n 不输出⾏尾的换⾏符,默认每⼀个echo都会在最后添加⼀个换⾏符。
注意-n选项并不被所有Linux版本⽀持。
POSIX标准中并未包含此选项。
s h e l l与s h e l l命令本章主要内容:shell基本功能及种类shell基本概念I/O重定向与管道shell的启动基本shell命令3.1shell基本功能与基本概念3.1.1shell基本功能shell是用户和Linux内核之间的接口程序。
shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。
shell一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构shell具有以下基本功能:1.命令解释执行2.文件名替换.3.输入输出重定向4.连通管道建立5.系统环境设置6.shell编程3.1.2字符与保留字1.字符(1)白空格(2)通配符*:代表从它所在位置开始的任何字符串。
?:代表它所在位置上的任何单个字符。
[]:代表一个指定范围的字符。
方括号中的字符范围可以由直接给出的字符组成,也可以由表示限定范围的起始字符、终止字符及中间的连字符“-”组成。
通配符模式串意义* 当前目录下所有文件名,但不包括.开头的文件。
例如abc但不是.abc *Text* 当前目录下所有文件名中包含有Text的文件名,但不包括.开头的文件[ab-dm]* 当前目录下所有以a、b、c、d、m开头的文件名[ab-dm]? 当前目录下所有以a、b、c、d、m开头且后面只跟有一个字符的文件名[!ab-dm]?或[^ab-dm]?当前目录下所有不以a、b、c、d、m开头且后面只跟有一个字符的文件名/dev/hd? 目录/dev下所有以hd开头且只有三个字符的文件名(3)注释符与注释在shell命令或shell编程中从字符“#”开始以后到行末的部分作为注释,因此以“#”开头的行是注释行。
(4)转义字符(5)Linux系统的特殊键2.保留字任何编程语言或系统都有一定数量的保留字,bashell的部分保留字如下:!,[,],(,),{,},break,continue,cd,echo,eval,exec,exit,export,function,getopts,hash,pwd,read,readonly,return,select,set,shift,test,time,trap,type,ulimit,unset,umask,wait,for,do,done,case,in,esac,if,else,elif,if,while,until转义字符所代表的意义转义字符所代表的意义\a 响铃符\t Tab键\b 退格键\v 垂直制表符\f 换页\\ \\n 换行\0??? 8进制表示\x?? 16进制表示\’’\` ` \””特殊键意义Ctrl+D 结束当前程序输入或终止当前程序或从系统中注销Ctrl+C 终止当前程序的执行Ctrl+\ 终止当前程序的执行(系统内部处理时不同于Ctrl+C)Ctrl+Z 挂起当前程序执行,将推到后台Ctrl+S/Ctrl+Q 暂停/继续屏幕的输出,必须配合使用ScrollLock 暂停/继续屏幕的输出,开关键Ctrl+Alt+Del 默认动作为重启系统Alt+F# 字符终端切换。
linux操作系统课程学习笔记,我的Linux学习笔记·Linux操作系统基础今天的笔记主要是关于Linux操作系统根底的相关学问。
那就从我⾯前的电脑开端讲起。
计算机和操作系统计算机主要包括五个部分:运算器,控制器,存储器,输⼊设备和输出设备。
通常,运算器,控制器再加上其他⼀些部件如寄存器等构成了我们通常所说的CPU(central processing unit),存储器则主要是内存。
运算器,控制器和存储器可以实现数据的处理.但是数据从何⽽来,运算之后的结果去往哪⾥?这就需要输⼊设备和输出设备(I/O设备)。
我们通常⽤到的输⼊设备包括键盘⿏标等,输出设备为屏幕,打印机等。
值得⼀提的是,计算机中有个叫做硬盘的东西,它并不是存储器,⽽是⼀个I/O设备。
在将数据读取到内存时,它是⼀个输⼊设备;⽽将结果保存到磁盘时,它就变成了⼀个输出设备。
这么多设备整合在⼀起,就成了⼀台计算机。
它可以接收我们的指令(键盘⿏标),通过运算(CPU),把结果展⽰给我们(屏幕,硬盘等)。
但是这么多硬件是如何协调作⽤,共同完成⼀个任务⽽不会我⾏我素地乱来呢?我们需要⼀个东西,它可以控制硬件有序地⼯作,各⾃执⾏⾃⼰的任务,这个东西就是操作系统(Operating System)。
操作系统是⼀个特殊的软件,它的任务就是硬件管理—控制CPU的运算,控制内存的分配,控制计算机的⼏乎⼀切。
假如⼀台电脑没有操作系统,它可能只是⼀个艺术品,或者⼀堆废铁。
⼀个完整的操作系统包括内核和⼀些辅助软件。
内核的主要任务就是进⾏硬件管理,它是⼀个操作系统最基础最底层的东西。
内核若想很好地控制硬件并使其发挥相应的功能,需要和硬件相识相知相爱,他俩可以成为完美的⼀对,全都仰仗于驱动的帮忙。
驱动是硬件的灵魂,它向操作系统提供了访问和使⽤硬件的接⼝,以便在某项任务中最⾼效地调⽤硬件。
什么是LinuxLinux就是⼀个操作系统,它可以管理整个计算机硬件,并且可以接收我们的指令,来指挥硬件完成相应的任务,并把结果反馈给我们。
shell编程基础知识点
一、Shell 编程基础知识
1、什么是 Shell
Shell 是一种用户使用的解释型程序,它是操作系统的一部分,派生自多种不同的系统。
它是一种命令解释器,它可以读取用户的输入,解释该输入,并执行相应的命令。
Linux 的 Shell 有很多种,如 bash,csh,ksh 等。
2、Shell 的特性
(1) 交互式:用户可以通过 Shell 的界面实现与计算机的交互,以便用户和计算机之间的信息交换。
(2) 自动化:Shell 可以将用户编写的一系列命令,保存为脚本,并在需要的时候自动执行,以减少用户的工作量。
(3) 扩展性:Shell 可以实现过滤和管道功能,可以与其他应用程序和编程语言结合使用,实现不同应用程序、不同编程语言之间的信息传递。
3、Shell 命令
(1)ls : 列出目录内容。
(2)cd : 改变目录。
(3)pwd : 显示当前所在目录。
(4)mkdir : 创建目录。
(5)rm : 删除文件或目录。
(6)cat : 显示文件内容。
(7)echo : 向屏幕输出指定字符串。
(8)exit : 退出当前 shell 环境。
(9)man : 查看指定命令的帮助文档。
(10)chmod : 改变文件权限。
linux+shell脚本语言基础知识linuxshell脚本语言基础知识一.shell简介linux系统的shell做为操作系统的外壳,为用户提供更多采用操作系统的界面,更确切的说,shell是用户与linux操作系统沟通的桥梁。
用户既可以输入命令执行,又可以利用shell脚本编程,完成更加复杂的操作。
shell就是一个命令解释器,它从输出设备加载命令,再将其变为计算机可以以了解的指令,然后执行它。
在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。
linux的shell种类众多,常用的存有:bourneshell(/usr/bin/sh或/bin/sh)、bourneagainshell(/bin/bash)、cshell(/usr/bin/csh)、kshell(/usr/bin/ksh)、shellforroot(/sbin/sh),等等。
不同的shell语言的语法有所不同,所以不能交换使用。
每种shell都有其特色之处,基本上,掌握其中任何一种就足够了。
通常用bash,也就是bourneagainshell进行编程。
二.shell采用1.建立和运行shell程序shell脚本程序:按照一定的语法结构把若干linux命令非政府在一起,就是这些命令按照我们的要求完成一定的功能。
它可以进行类似程序的编写,并且不需要编译就能执行。
(只需修改其权限)像是撰写高级语言的程序一样,撰写shell程序须要一个文本编辑器,如vi和vim,通常采用vim文本编辑器,积极支持更便捷的填入模式。
首先采用vim编辑器编辑一个hello.sh文件:#!/bin/bash#helloworldexampleecho\这样,一个最简单的shell程序就撰写完了。
第一行:#!说明hello.sh这个文件的类型的,这有点类似于windows系统下的用不同的文件后缀来表示不同的文件类型,但又不完全相同。
linuxshell编程实验总结Linux Shell编程实验总结在Linux系统中,Shell编程是一种强大的工具,可以帮助用户进行自动化任务、脚本编写和系统管理。
通过学习和实践Shell编程,我深深地体会到了其在提高工作效率和简化任务流程方面的重要性。
在这篇文章中,我将总结我在Linux Shell编程实验中的经验和心得。
一、实验概述在这次Linux Shell编程实验中,我学习并应用了Shell脚本语言,掌握了基本的语法和命令,并通过实验来加深对Shell编程的理解和掌握。
实验的内容包括变量的定义和使用、条件语句的实现、循环结构的应用等。
二、变量的定义和使用在Shell编程中,变量的定义和使用是非常重要的一部分。
通过实验,我学会了如何使用“=”符号来给变量赋值,并可以在后续的命令中使用这个变量。
在实践中,我发现给变量加上$符号可以获取变量的值,并且可以在字符串中插入变量。
这在编写脚本时非常有用,可以将一些可变的部分定义为变量,提高程序的可读性和可维护性。
三、条件语句的实现条件语句在Shell编程中起到了重要的作用,可以根据不同的条件执行不同的命令。
通过实验,我掌握了Shell中常用的条件判断语句,如if语句和case语句。
在编写条件语句时,我注意到要使用适当的比较运算符(如“-eq”表示等于、“-ne”表示不等于等),并在语句块的结尾加上“fi”或“esac”来结束条件语句的定义。
四、循环结构的应用在实践中,我发现循环结构是Shell编程中非常重要的一部分,可以重复执行特定的任务。
通过实验,我掌握了两种常见的循环结构:for循环和while循环。
在编写循环结构时,我注意到要使用适当的循环控制语句,如“break”可以用于跳出循环,“continue”可以用于跳过当前循环中的剩余命令,继续下一次循环。
五、实验心得通过这次实验,我深刻认识到了Shell编程在自动化任务和脚本编写方面的重要性。
Shell编程既可以简化日常工作中的重复性任务,又可以提高工作效率和减少出错的可能性。
目录第一章 LINUX简介及安装 (2)一、LINUX介绍 (2)二、LINUX安装 (2)三、LINUX目录 (2)四、总结来说: (4)第二章常用命令及帐户管理 (4)一、linux命令格式 (4)二、常用命令 (4)三、用户管理命令 (5)使用技巧: (7)第三章 vi 编辑器 (8)一、Linux 系统中的编辑器知识 (8)二、vi 的模式 (8)三、命令: (8)第四章 SHELL的使用 (8)一:Shell的环境 (8)二、Bash的主要功能 (9)三、Shell变量 (9)第五章、应用程序安装与管理 (11)一、Linux应用程序组成 (11)二、RPM(Redhat Package Manager)包管理 (11)三、应用程序的编译安装 (11)第六章Linux系统管理 (12)一、启动过程: (12)二、运行级别: (12)三、系统服务的启动状态: (13)四、磁盘空间配额: (14)五、压缩命令: (14)第7章Linux基本网络配置 (15)第八章 NFS文件系统: (15)一、NFS的概述和安装 (15)二、NFS服务器的配置 (16)三、图形界面的NFS服务器配置工具: (16)第一章 LINUX简介及安装一、LINUX介绍1Linux:Linux是由芬兰大学的Linus Torvalds 李納斯发起创建的开源软件项目。
2版本号xx.yy.zz :①.xx表为主版本号,yy为次版本号,zz为修订的版本号。
②.次版本号中,单数代表测试版,双数代表正式发行版3开源软件:①源代码开放。
②GPL协议:主要是以源代码形式发布,任何人都可以得到源代码,但是不提供任何的担保,不限制商业性质的发行和包装。
③LGPL许可协议:允许在使用者自己的应用程序中使用程序库,即使不公开自己的源代码。
二、LINUX安装1RHEL4是由RED HAT公司发布的2Linux硬盘概念:①可以分为主分区、扩展分区、逻辑分区。
Linux学习笔记⼀(⽂件和⽬录操作)1.基本shell操作命令解析器--根据命令的名字,调⽤对应的可执⾏程序shell--unix操作系统bash--Linux操作系统(⽂件系统)Linux⽂件系统的存储单元是块在磁盘上存储的时候每个⽂件都有⼀个inode--i节点,保存了⼀些⽂件信息,通过iNode找到对应的⽂件a.快捷键b.虚拟终端history--查询命令的历史记录ctrl+p == 向上的箭头,查询上⼀个命令ctrl+n == 向下的箭头,查询下⼀个命令ctrl+b 向左移动backctrl+f 向右移动forwardctrl+a 移动到⾏⾸ctrl+e 移动到⾏尾ctrl+h 刪除光标前⾯的字符ctrl+d 刪除光标覆盖的字符ctrl+u 刪除光标前⾯的所有字符ctrl+k 删除光标位置到⾏尾的字符ctrl+l或者clear命令清理屏幕c.命令和路径补齐tab智能提⽰键,按⼀次没反应说明有很多符合条件的命令,再按⼀次出现符合条件的命令列表cd ⽬录 + 连续两次tab,显⽰⽬录下⼀级的所有路径d.centos7防⽕墙操作systemctl start firewalld.service 启动systemctl enable firewalld.service 开机启动systemctl stop firewalld.service 停⽌systemctl disable firewalld.service 禁⽌开机启动systemctl status firewalld.service 查看状态firewall-cmd --state 查看状态2.Linux系统⽬录结构ls 路径(查询当前路径下的所有⽂件)/根⽬录下的⽬录说明:/bin bin是binary的缩写,这个⽬录存放着经常使⽤的命令可执⾏程序/boot 存放的是启动Linux时的⼀些核⼼⽂件,包括⼀些连接⽂件以及镜像⽂件(开机启动项)/dev 是Device(设备)的缩写,该⽬录存放的是Linux的外部设备,在Linux中访问设备的⽅式和访问⽂件的⽅式是相同的(Linux奉⾏⼀切皆⽂件,它会把所有硬件外设抽象成设备⽂件存到dev⽬录之下,⽐如⿏标键盘)/etc ⽤来存放所有系统管理所需要的配置⽂件和⼦⽬录/home ⽤户的主⽬录,在Linux中,每个⽤户都有⼀个⾃⼰的⽬录,⼀般该⽬录名是以⽤户的账号命名。
Linux 操作系统shell学习笔记(linux系统)linux软件开发No.001 文件安全与权限1. umask 决定了新建文件的权限2. 软链接(符号链接) ln -s source_path target_pathNo.002 find和xargs1. find pathname -options [-print -exec -ok]其中exec参数的命令格式:'command-' {} \; 注意必须包含【{} \;】-perm 按权限来查找ex. find . -perm 755 -print-mtime 按修改时间来查找ex. find / -mtime -5 -print 更改时间5天以内find / -mtime +5 -print 更改时间5天以前2. xargs与-exec和-ok类似,但是限制更少,也更快3种参数的命令:find . -name "*.c" -exec wc -l {} \;find . -name "*.c" -ok wc -l {} \; 每次执行命令前有提示find . -name "*.c" | xargs wc -lNo.003 后台执行命令1. [crontab] [at] [&] [nohup]四种No.004 文件名置换1. 列出隐藏文件ex. ls .*No.005 shell输入与输出1. echo输出时加上-n 参数不换行,ex. echo -n "aaaa"2. tee 命令可以同时输出到屏幕和文件中ex. ls | tee file.out3. 标准输入0 标准输出1 标准错误24. 将标准输出和标准错误输入到一个文件ex. command >file.out 2>&1No.006 命令执行顺序1. 命令1 && 命令2 命令1执行成功后才会执行命令22. 命令1 || 命令2 命令1执行失败后才会执行命令2No.007 正则表达式1. 正则表达式元字符及含义^ 只匹配行首$ 只匹配行尾* 匹配0次或多次[] 匹配[]内字符\ 转义符. 匹配任意一个字符pattern\{n\} 匹配pattern出现的次数,n次pattern\{n, \} 同上,最少n次pattern\{n, m\} 同上,次数在n与m之间No.008 grep1. grep 主要选项及其含义-c 只输出匹配行的行数-i 不区分大小写-h 查询多文件时不显示文件名-l 查询多文件时只输出包含匹配字符的文件名-n 显示匹配行及行号-s 不显示不存在或无匹配文本的错误信息-v 显示不包含匹配文本的所有行2. 查询空行grep '^$' filename3. 类名及等价的正则表达式[[:upper:]] = [A-Z][[:lower:]] = [a-z][[:digit:]] = [0-9][[:alnum:]] = [0-9a-zA-Z][[:space:]] = 空格或tab键[[:alpha:]] = [a-zA-Z]No.009 AWK# awk的主要作用在于将文本分成各个区域,便于分别进行处理1. awk -F指定分隔符,-f指定awk脚本ex. awk -F: 'commands' input-file(s)ex. awk -f awk-script input-file(s)2. awk 分隔出的域用$1,$2...$n来表示,其中$0表示所有域3. awk 条件操作符<, <=, >=, ==, !=~ 匹配正则表达式!~ 不匹配正则表达式4. awk 内置变量ARGC 命令行参数个数ARGV 命令行参数排列ENVIRON 支持队列中系统环境变量的使用FILENAME awk浏览的文件名FNR 浏览文件的记录数FS 设置输入域分隔符,等价于命令行-F选项NF 记录的域个数NR 已读的记录数OFS 输出域分隔符ORS 输出记录分隔符RS 控制记录分隔符ex. awk '{print NF,NR,$0} END{print FILENAME}' input-file 5. awk 字符串函数gsub, index, length, match, split, sprint, sub, substr, substr6. awk 中的printf函数可以控制格式化输出7. awk 的循环结构For (element in array) print array[element]No.010 sed# sed的主要作用在于过滤和查找文本中的特定内容1. sed 命令格式:sed [options] sed-command input-filesed [options] -f sed-script input-fileNo.011 合并和分隔文件1. sort, uniq, join, cut, paste, splitNo.012 tr的用法1. 去除oops.txt中的重复字符tr -s "[a-z]" < oops.txt2. 去除oops.txt中的空行tr -s "[\n]" < oops.txt3. oops.txt中小写转大写tr -s "[a-z]" "[A-Z]" < oops.txtNo.013 登录环境1. /etc/passwd 保存所有账号的基本信息(不包括密码)2. /etc/profile 基本的配置信息,登录时读取此文件3. $HOME/*profile 各个用户的profile文件,会覆盖系统的profile文件4. $HOME/*logout logout(键入命令exit时)是执行的脚本No.014 环境和shell变量1. shell变量的设置方式Variable-name=value 设置实际值到variable-nameVariable-name+value 如果设置了variable-name,则重设其值Variable-name:?value 如果未设置variable-name,显示未定义用户错误信息Variable-name?value 如果未设置variable-name,显示系统错误信息Variable-name:=value 如果未设置variable-name,设置其值Variable-name:-value 如果未设置variable-name,就用value,但是不设置variable-name2. 设置只读变量readonly variable-name3. export variable-name 可以将变量导入到子shell中4. shell脚本的参数$0表示脚本名字,$1表示第一个参数......$9表示第九个参数5. 特定shell变量$# 参数个数$* 用一个字符串显示所有参数$$ 脚本运行的当前进程ID$! 后台运行的最后一个进程的进程ID$@ 与$*相同,每个参数作为独立的字符串$- 显示shell的当前选项,与set命令相同$? 显示shell命令的退出状态,0表示无错误,其他表示有错No.015 引号1. 双引号("") 其中引用的变量会替换为变量值。
比如:[wangyb@localhost bash]$ STR="Hello world"[wangyb@localhost bash]$ echo "$STR"Hello world2. 单引号('') 忽略变量和其他特殊字符,单引号内任何内容都当成字符串显示。
比如:[wangyb@localhost bash]$ STR="Hello world"[wangyb@localhost bash]$ echo '$STR'$STR3. 单引号和双引号同时使用时,谁在外面谁起作用。
比如[wangyb@localhost bash]$ echo "'$STR'"'Hello world'[wangyb@localhost bash]$ echo '"$STR"'"$STR"4. 反引号(``) 反引号中的内容被当做命令来执行。
比如[wangyb@localhost bash]$ VAR=`date`[wangyb@localhos bash]$ echo $VARThu Dec 22 22:08:07 JST 20115. 转义符(\)No.016 Shell脚本介绍1. 脚本的第一行一般以#!/bin/bash 开始2. 给脚本加入执行权限后就可以运行脚本了#No.017 条件测试1. 测试语法test condition 或者[ condition ] 使用方括号是注意在condition两边加上空格2. 文件状态测试-d 目录-s 文件长度大于0-f 正规文件-w 可写-L 符号连接-u 文件有suid位设置-r 可读-x 可执行例子如下:测试是否为目录,也可以用test -d bash.sh 来代替方括号[root@localhost bash]# [ -d bash.sh ][root@localhost bash]# echo $?1[root@localhost bash]# [ -d . ][root@localhost bash]# echo $?3. 逻辑与-a 逻辑或-o 逻辑否! 例子如下:[root@localhost bash]# [ -d bash.sh -a -d . ][root@localhost bash]# echo $?1[root@localhost bash]# [ -d bash.sh -o -d . ][root@localhost bash]# echo $?[root@localhost bash]# [ ! -d bash.sh -a -d . ][root@localhost bash]# echo $?[root@localhost bash]# [ ! -d bash.sh -a ! -d . ][root@localhost bash]# echo $?14. 字符串测试[ string1 string_operator string2 ] 或者[ string_operator string ]string_operator可为:= 两个字符串相等!= 两个字符串不等-z 空串-n 非空串5. 数值测试[ "number1" num_operator "number2" ]num_operator可为:-eq 数值相等-ne 数值不等-gt number1 > number2-lt number1 < number2-le number1 <= number2-ge number1 >= number2例子:[root@localhost bash]# [ "100" -gt "101" ][root@localhost bash]# echo $?1[root@localhost bash]# [ "100" -lt "101" ][root@localhost bash]# echo $?6. expr语法expr arg1 operator arg2例子:变量自增[root@localhost bash]# COUNT=1[root@localhost bash]# echo $COUNT1[root@localhost bash]# COUNT=`expr $COUNT + 1`[root@localhost bash]# echo $COUNT2No.018 控制流结构1. if语句格式if 条件1then执行命令1elif 条件2then执行命令2else执行命令3fi2. case语句格式case 值in模式1)命令1;;模式2)命令2;;......easc其中的“模式”可以是*(任意字符), ?(任意单字符), [..](范围内任意字符) “模式”中还可以是使用| (比如str1|str2 表示str1和str2都可以) 3. for语句格式for 变量名in 列表do命令1命令2 ......done4. until语句格式until 条件命令1......done一直执行至条件为真时才结束,至少执行一次5. while语句格式while 条件命令1......done6. 利用IFS来改变读取内容的分隔符7. 利用break和continue控制循环的执行No.019 Shell函数1. shell函数格式函数名(){命令1......}或者function 函数名(){命令1......}2. 引用其他脚本中函数 . /pathname/funcfile (<点><空格><斜线><文件完整路径名>或者<点><空格><文件相对路径名>)3. 函数中通过$1, $2,......$9来获取参数No.020 向脚本传递参数1. 使用shift依次获取各个参数,比如while [ $# -ne 0 ]doecho $1 # 通过shift,$1将依次表示各个参数shiftdone2. getopts语法格式getopts operation-string variable。