Formatting Long Lines 格式化多行字符的shell脚本

很久没更新了,很久没看脚本了
想想应该继续看脚本了

#14 Formatting Long Lines

#!/bin/sh
# A version of fmt, using nroff. Adds two useful flags: -w X for line width
#  and -h to enable hyphenation for better fills.
while getopts "hw:" opt; do
 case $opt in
  h) hyph=1        ;;
  w) width="$OPTARG"   ;;
 esac
done
shift $(($OPTIND - 1))
nroff << EOF
.ll ${width:-72}
.na
.hy ${hyph:-0}
.pl 1
$(cat "$@")
EOF
exit 0

上面脚本是用来格式化输出软件的
主要用到了 getopts 来获得处理参数
我们的命令行下的统一格式为 :

command -options parameters

getopts语句。该语句的格式为:
getopts option_string variable
其中option_string中包含一个有效的单字符选项。若getopts命令在命令行中发现了连字符,
那么它将用连字符后面的字符同option_string相比较。若有匹配,则把变量variable的值设为该选项。
若无匹配,则variable设为?。当getopts发现连字符后面没有字符,会返回一个非零的状态值。
Shell程序中可以利用getopts的返回值建立一个循环。

有时侯选项中还带一个值,getopts命令同样也支持这一功能。这时需要在option_string中选项字母后加一个冒号。当getopts命令发现冒号后,会从命令行该选项后读取该值。若该值存在,那么将被存在一个特殊的变量OPTARG中。如果该值不存在,getopts命令将在OPTARG中存放一个问号,并且在标准错误输出上显示一条消息。
------------
optstring  option字符串,会逐个匹配
varname    每次匹配成功的选项
arg        参数列表,没写时它会取命令行参数列表

$OPTIND    特殊变量,option index,会逐个递增, 初始值为1
$OPTARG    特殊变量,option argument,不同情况下有不同的值
------------

shift 用于重新分配位置参数,其实就是把向参数左移动一个位置如:$1<--$2,$2<--$3老的$1将被删 除掉。

------------

脚本解释
shift $(($OPTIND - 1))  会使$@变为最后一个参数,即为文件名。
${width:-72},${hyph:-0} 用来定义默认值的。
nroff现在很少用了,查资料发现是用来将文本文件格式化为行式打印机或终端屏幕所需要的形式。

感觉这脚本的用处不是很大,linux有现成的命令可以来完成这个功能
他就是fmt。

(0)

相关推荐

  • Formatting Long Lines 格式化多行字符的shell脚本

    很久没更新了,很久没看脚本了 想想应该继续看脚本了 #14 Formatting Long Lines #!/bin/sh # A version of fmt, using nroff. Adds two useful flags: -w X for line width # and -h to enable hyphenation for better fills. while getopts "hw:" opt; do case $opt in h) hyph=1 ;; w) w

  • shell脚本命令行参数简介

    之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互.bash shell提供了命令行参数添加在命令后面的数据值).命令行选项修改命令行为的单字符值)和直接读取键盘输入. 1.命令行参数向shell脚本传递数据的最基本方式是使用命令行参数. 1)读取参数读取输入的参数的变量为位置参数,位置参数通过标准数字表示,其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为第九个参数.shell脚本自动将命令行参数赋值给各个位置变量.同时输入多个参数可以是数值也可

  • AndroidStudio 设置格式化断行宽度教程

    1.设置格式化换行的宽度 就是这个线,那条右标准线的位置: Setting–>Editor–>Code Style 默认值是100,按照自己的需要更改. 2.设置格式化的时候自动断行到标准线位置 这样就不用往右拖看代码了: Setting–>Editor–>Code Style–>Java 点击右侧标签Wrapping and Braces下勾选Line breaks和EnSure right margin is not exceeded 补充知识:Android Studi

  • 使用Shell 脚本实现每隔100行插入一条记录且记录第一列包含行号其他列不变

    1.例子:每隔100行插入一条记录,并且此条记录的第一列包含行号,其他列与第一行相同 #!/bin/sh var="00001" # 变量 cat a.txt|awk 'NR==1'|while read line # 获取文件第一行 do #echo "$line" result=`echo "$line"|cut -f2-` # 默认以tab分割,获取第二列至最后一列 cat a.txt|awk 'NR%100==0{printf("

  • 在CMD命令行中运行python脚本的方法

    网上给出了各种方法,都无碍乎先切换到Python脚本所在目录,然后输入Python脚本名称并回车,本文这里给出了更简便的方法. 方法一: 进入Python脚本所在的文件夹,shift+右击,选择"在此处打开命令窗口",按TAB键切换文件,选择目标python脚本,当然直接输入也行. 方法二: win+R,输入cmd,进入命令行窗口,直接将脚本文件拖到窗口里回车就可以了. 以上这篇在CMD命令行中运行python脚本的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多

  • shell脚本快速创建、格式化、挂载新添加的磁盘实现方法

    一.通过管理员选择创建.格式化.挂载新添加的磁盘脚本 #! /bin/bash echo "==============================" PS3="chose which disk you want to create:" select W in `ls /dev/sd*|grep -o 'sd[b-z]'|uniq` quit do case $W in sda) fdisk -l /dev/sda break;; sd[b-z]) echo &

  • shell脚本快速创建格式化磁盘与详细操作步骤

    这篇文章给大家介绍如何利用shell脚本实现对一个磁盘进行分区格式化挂载,具体内容如下所示: 查看当前磁盘分区状况 查看当前磁盘的一个分区状况,使用命令:fdisk -l fdisk -l //查看磁盘信息 lsblk 让硬盘进入分区模式 fdisk /dev/sdb 命令(输入 m 获取帮助): m //打印选项菜单 添加新的分区: 命令(输入 m 获取帮助):n //添加一个分区 选择分区类型: Select (default p): e //输入e表示创建扩展分区 分区数量: 分区号 (1

  • Shell脚本对文件中的行、单词、字符进行迭代输出示例

    在进行文本文件进行处理时,对文件件中的行.单词.字符进行迭代和遍历是非常常用的操作.而将一个简单的循环用于迭代,再加上来自stdin或文件的重定向,这就是对文件中的行.单词.和字符进行迭代的基本方法. 废话不多说,马上来看看怎么样实现吧. 1.迭代文中的每一行 使用while循环从标准输入中读取,因为要在标准输入中读取,就要对文件进行重定向,使它重定向到stdin中,代码如下: 复制代码 代码如下: while read line;  do  echo $line;  done < file.t

  • php实现格式化多行文本为Js可用格式

    js里现在存写模板的场景好多,如:弹框类的html代码模板等,js不支持换行的长文本写法,必需要一行行的加起来,如: 复制代码 代码如下: var content = '<div>row 1</div>' + '<div>row 2</div>'; 而不可以写成: 复制代码 代码如下: var content = '<div> row 1</div> <div>row2 </div> '; 于是小加工一php小

  • IE网页js语法错误2行字符1、FF中正常的解决方法

    今天开发过程中,突然遇到此奇葩问题,我之前以为是我js打开模态窗体传递的url参数有问题,我使用open没问题.使用模态窗体则会先弹出此错误然后再显示新打开的界面.网上查了许久,总结解决方案如下: 1. 可能与IE的某些插件冲突.请把所有无关的IE加载项全部禁用后尝试 2. 引用了不存在的js文件 3. 页面的某些文件在文档模型还没建立时就已经开始引用相关的节点 我最后是通过禁用了IE中的插件才解决的.

随机推荐