程序名, 第一个参数以此类推,直到。第10个参数开始需要用花括号把数字括起来 读取程序名,默认是读取带路径的程序名,但是有时候只需要脚本名,并不需要路径,这时就"og:type" content="webpage">程序名,第一个参数以此类推,直到。第10个参数开始需要用花括号把数字括起来 读取程序名,默认是读取带路径的程序名,但是有时候只需要脚本名,并不需要路径,这时就" /> 程序名,第一个参数以此类推,直到。第10个参数开始需要用花括号把数字括起来 读取程序名,默认是读取带路径的程序名,但是有时候只需要脚本名,并不需要路径,这时就"> shell对于用户输入的命令行如何进行处理_框架_内存溢出

阅读24

shell对于用户输入的命令行如何进行处理,第1张

linux shell 处理用户输入命令行

参数

读取参数,$0程序名,$1第一个参数以此类推,直到$9。第10个参数开始需要用花括号把数字括起来 ${10}

读取程序名,默认$0是读取带路径的程序名,但是有时候只需要脚本名,并不需要路径,这时就可以用basename了,比如:

这样可以根据不同的脚本名执行不同的功能

测试参数,当需要参数而没有跟参数时会报错。所以需要检查数据是不是存在就很有必要,如下所示:

特殊参数变量

参数计数  $# 该变量记录脚本运行时的参数个数,如果要在大括号内使用该参数的话需要把$改为!因为大括号内不能使用美元符。

抓取所有的数据,$和$@可以提供对所有参数的快速访问。$把所有参数当成一个参数,$@会单独处理每个参数。移动变量 shift 默认左移一个位数,可以在shift后面跟数字修改默认左移位数。shift 2  左移2位。处理

选项

简单的选项

运行结果:

分离参数和选项

此处用破折号来区分选项和参数

处理带值的选项如上图所示处理带值的选项 -b

getopt 命令,能够识别

命令行

参数

getopt options optstring parameters

optstring 列出你要在脚本中用到的每个命令行选项字母,然后再每个需要参数值的选项字母后加一个冒号。getopt会基于定义的optstring解析提供的参数。

如图所示: -b 选项需要参数所以b后面有个:  参数是test1   而test2 和test3是参数,用双破折号分开

当有无效参数出现的话会提示错误,如下图所示:

当加上-q选项时会忽略错误信息,如下所示:

注意-q 的位置

脚本中使用getopt

采用set命令 -- 选项会将命令行参数替换成set命令的命令行的值。首先原始的脚本命令行参数传给getopt,然后getopt把输出给set命令。比如下面

set -- `getopt -q ab:cd "$@"`  下面是一个例子:

getopts命令

getopts optstring variable,在optstring前面加个: 可以去掉错误消息。

getopts用到两个环境变量。如果选项需要跟一个参数值,OPTARG环境变量就会保存这个值。OPTIND环境变量保存了参数列表中getopts正在处理的参数位置。

对于未定义的选项统一输出成问号:

其中d是未定义的。

getopts处理每个选项时会将OPTIND环境变量值增一。

使用OPTIND的值和shift命令来移动参数,如下图所示:

其中OPTIND的值是记录参数的位置,移动-1个量正好到达参数的位置。

获得用户输入

基本读取

-n选项会移掉字符串末尾的换行符,允许脚本用户紧跟其后输入数据。

-p 参数可以在read后面跟多个变量,依次赋值

如果read后面不跟变量,那么默认会把收到的数据放到特殊环境变量REPLY中

-t 设置超市时间,单位秒 ,超时后read命令会以非零退出状态码退出

-n后面的数字1 表示直接受一个字符然后就主动退出,不用再按回车键。

-s隐藏输入,事实上数据会被显示,只是read命令将文本颜色设置成跟背景色一样

从文件中读取

for in 语句是根据空格取得集合中的一个元素,正好你这里第三条数据里面含有空格,于是就被拆分了。

read命令是根据换行符,一次读取一条记录,因此不存在此问题。

只要记住,按行读文件的几种标准格式就行了:

while read line

do

   echo "$line" #处理line的时候记得加上双引号以防存在空格

done <${In_File}

或者使用awk / sed这些本身就是按行处理数据流的工具:

awk '{print}' ${In_File}

sed -n 'p' ${In_File}

传递交互式参数的话,你可以试试这种,比如创建分区的一个例子:

echo "p        主分区

1                   第一分区

                    指定默认从1开始

+200M        分区200M

t                    更改分区类型

若只有一个则不需要指定分区

8e                lvm分区

w" | fdisk /dev/sdb

1、安装sshpass或设置ssh无密码访问

tar zxf sshpass-105targz

cd sshpass-105

/configure;make;make install

which sshpass

/usr/local/bin/sshpass

2、创建文件iptxt

1921681101 111111

1921681102 111112

1921681103 111113

1921681104 111114

1921681105 111115

1921681106 111116

3、remote-rebootsh

#!/bin/sh

while read ip pw;

do

sshpass -p "$pw" ssh root@$ip "reboot";

done < iptxt

read。在Shell中用来从标准输入中读取数据并赋值给变量的关键字是read。没有进行重定向,默认就是从键盘读取用户输入的数据,进行了重定向,那么可以从文件中读取数据。编程是编定程序的中文简称,就是让计算机代码解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。

所谓后台执行,是创建子shell,由shell的子进程去执行的。

而用户输入在当前shell,这样显然是不可能被后台进程读到的。

可以考虑从文件中去读:

============= testsh ==============

#!/bin/bash

while true

do

if [ -f filetxt ]; then

read ip <filetxt

[ -n "$ip" ] && ping -c 1 "$ip" >>resulttxt

fi

sleep 1

done

运行 /testsh &

用户输入 echo 17216011 >filetxt

等一段时间后就可以在resulttxt中看到结果了。

以上就是关于shell对于用户输入的命令行如何进行处理全部的内容,包括:shell对于用户输入的命令行如何进行处理、SHELL 标准输入读取的问题、Linux Shell中如何自动输入命令需要接受的键盘输入等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:
https://www.54852.com/web/9651516.html命令
分区
(0)微信扫一扫打赏 支付宝扫一扫微信扫一扫
支付宝扫一扫
数据分析师培训数据分析师培训
一级用户组
记录ScrollView获取手势滑动距离
上一篇
2023-04-30
matlab 行数列用循环提取。
2023-04-30

发表评论 后才能评论
提交

    评论列表(0条)
    二十五
    程序名,第一个参数以此类推,直到。第10个参数开始需要用花括号把数字括起来 读取程序名,默认是读取带路径的程序名,但是有时候只需要脚本名,并不需要路径,这时就", "pubDate":"2023-04-30", "upDate":"2023-04-30" } 程序名,第一个参数以此类推,直到。第10个参数开始需要用花括号把数字括起来 读取程序名,默认是读取带路径的程序名,但是有时候只需要脚本名,并不需要路径,这时就', author : '数据分析师培训', cat_name : '框架', time_y_m : '2023年04月', time_d : '30', site_motto : '内存溢出' };
    保存{label}{label}{label}{label}{script}{script}{script}{script}