shell实战:多种方式实现获取列内容

自己不是专业的linux,平时工作中也不用linux编程,自学一些linux shell编程,忘了学,学了忘,效率不高。今天权当复习吧。

想想这样一个情景吧,获取某一行的部分列值。

考虑这样的输入:“root:x:0:0:root:/root:/bin/bash”,现在我们获取用户及shell信息。自己暂时想到的5种实现方式。

#!/bin/bash
##############################################
#第二种实现 普通循环
##############################################
line="root:x:0:0:root:/root:/bin/bash";
oldIFS=$IFS;
IFS=":";
declare -i count=0;
#count=0;
for item in $line; 
do
	[ $count -eq 0 ] && user=$item
	if [[ $count -eq 6 ]]; then
		shell=$item
	fi
	#let count++
	count=$[ $count+1 ]
	#count=$(($count+1))
	#count=`expr $count+1`
	#count=$(expr $count+1);
done
IFS=$oldIFS;
echo 1: $user\‘s shell is  $shell by process:$$;
##############################################
#第二种实现 借助sed命令;
##############################################
user=`echo $line |sed ‘s/:.*$//‘`;
shell=$(echo $line |sed ‘s/^.*://‘);
echo 2: $user\‘s shell is  $shell by process:$$;
##############################################
#第3种实现 借助cut命令;
##############################################
user=`echo $line |cut -d: -f1`;
shell=$(echo $line |cut -d: -f7);
echo 3: $user\‘s shell is  $shell by process:$$;

##############################################
#第4种实现  xargs使用
#############################################
echo $line |xargs -d: -n 1 |tr -s ‘\n‘> file4
user=`cat  file4 | head -n 1`
shell=`cat file4 | tail -n 1`;
echo 4: $user\‘s shell is  $shell by process:$$;
rm -rf file4 2>>/dev/null
##############################################
#第5种实现  awk使用
#############################################
 echo $line |awk  -F ‘:‘  ‘{print "5:" $1 " ‘\‘‘s "  " shell is" $7 }‘

分析:抛开5种方式的优劣。可以了解以下内容。

  1. 文本处理工具:sed,tr
  2. 文本列选择工具:cut,awk
  3. 文本行选择工具:head,tail
  4. 计数运算多种方式:$[],$(()),``
  5. 变量声明:declare
  6. 参数处理:xargs

其实,在编写过程,连自己经常使用的命令,自己都记不起来。看来会和熟练还是不一样的。

时间: 2024-08-08 09:25:23

shell实战:多种方式实现获取列内容的相关文章

Shell传参的多种方式

Shell 传参的多种方式 使用$1 $2 这种类似占位符的方式 # 命令行调用 start.sh 8080 9090 # 脚本中获取 port1=$1 # 8080 port2=$2 # 9090 可以看出来这种方式使用起来很简单,但灵活性太差,比如我只想传第二个参数,第一个使用默认值,这个就不行,所以就有第二种,指定参数传递 指定参数 getopts(shell内置命令) #命令行调用 start.sh -a 8080 -b 9090 # 脚本中获取 while getopts "d:b:h

PDO多种方式取得查询结果

PDO多种方式取得查询结果 01 December 2009 1:26 Tuesday by Sjolzy PDO最大的特点之一是它的灵活性,本节将介绍如何取得查询结果,包括: 数组(数值或关联数组): 字符串(单列的结果集): 对象: 回调函数. 1.快取一行 FetchColumn是为应用程序取得一个仅包含单列的数据,代码如下: $u = $db->query(“SELECT id FROM users WHERE login= ‘login’ AND password=‘password’

多种方式实现文件下载功能

(1)使用 NSURLConnection 直接方式 (2)使用 NSURLConnection 代理方式 (3)使用 NSURLSession 直接方式 (4)使用 NSURLSession 代理方式 (5)使用 AFNetworking 方式 附加功能: 使用 AFNetworking 中的 AFNetworkReachabilityManager 相关操作来检查网络情况: AFNetworkReachabilityStatusReachableViaWiFi:Wi-Fi 网络下 AFNet

CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动

CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动1.关于mysql?MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.特点: Mysql是开源的,所以你不需要支付额外的费用.Mysql支持大型的数据库.可以处理拥有上千

Android进阶——构建UI布局的多种方式总结

引言 作为Android App,给人第一印象的就是用户界面(UI),简洁友好的UI,自然会给用户优秀的体验,自然很容易就得到用户的认可和赞许,这样App才变得真正的有价值.所以作为开发App的第一步,UI尤为重要,构建UI有很多种方式:xml静态布局.java动态代码.HTML构建(借助WebView)和第三方开源框架等. 一.构成UI的基本元素--View和ViewGroup概述 在Android中绝大部分的UI组件都是存放在android.widget包及其子包.android.view包

Android入门——构建UI布局的多种方式

引言 作为Android App,给人第一印象的就是用户界面(UI),简洁友好的UI,自然会给用户优秀的体验,自然很容易就得到用户的认可和赞许,这样App才变得真正的有价值.所以作为开发App的第一步,UI尤为重要,构建UI有很多种方式:xml静态布局.java动态代码.HTML构建(借助WebView)和第三方开源框架等. 一.构成UI的基本元素--View和ViewGroup概述 在Android中绝大部分的UI组件都是存放在android.widget包及其子包.android.view包

myeclipse安装svn插件的多种方式

开发者服务评测征文 十万现金悬赏大神 方法一:在线安装 1.打开HELP->MyEclipse Configuration Center.切换到SoftWare标签页. 2.点击Add Site 打开对话框,在对话框Name输入Svn,URL中输入:http://subclipse.tigris.org/update_1.6.x3.在左边栏中找到Personal Site中找到SVN展开.将Core SVNKit Library和Optional JNALibrary添加(右键Add to Pr

iOS 【野路子】获取WKWebView内容高度做H5原生连接

前言:是这样的,刚写完上一篇文章还没缓过神来,上一篇文章我还提到了,想和大家聊聊原生+H5如何无缝连接的故事.结果我朋友就给我发了两篇他的作品.他的做法也都有独到之处.好的文章都是这样,让你每次看都能有新的收获,我们也都致力于写一些能帮别人解决问题的文章,下面我用另一种方式来完美实现这个问题.毕竟之前大家都是根据UIWebView写的,我来说说换成WK之后的区别,主题思路也不同哦~ 插两个链接,是我朋友的大家也可以做个对比 iOS [终极方案]精准获取webView内容高度,自适应高度 iOS

从注册流程 分析如何安全退出多个Activity 多种方式(附DEMO)

前言 由于一个同学问到我如何按照一个流程走好之后回到首页,我以前看到过4个解决方案,后来发现有做个记录和总结的必要,就写了这篇博文.(之前看小强也写过一篇,这里通过自身的分析完整的总结一下以下6种方案,并加上一个DEMO便于大家了解大体流程) 在android的用户交互中,按钮触发的意图(Intent)跳转会为你重新打开新的一个界面活动(Activity),对于之前的界面根据需求进行摧毁(Finish())或则保留. 如果一个交互流程中,是从A开始,按照A - B - C - D - A这样的顺