
参数
读取参数,$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
欢迎分享,转载请注明来源:内存溢出

