shell 脚本之获取命令输出字符串以及函数参数传递
在ubuntu 14.04之后,所有的U盘挂载也分用户之分,最近很多操作也和U盘有关,所以就研究了一上午shell脚本函数以及字符串操作的方法。
字符串操作:
获取他的命令输出比较简单,打个简单的比方,我想获取whoami 的用户名,那么直接可以使用如下代码。
```sh
#!/bin/sh
USER_NAME=$(whoami)
main() {
sudo cp target/* /media/$USER_NAME/rootfs/ -rf
}
main
```
```sh
#如果你想操作这些字符串的话,那么可以有以下方法
#shell中截取字符串的方法有很多中,
${expression}一共有9种使用方法。
${parameter:-word}
${parameter:=word}
${parameter:?word}
${parameter:+word}
#上面4种可以用来进行缺省值的替换。
${#parameter}
# 上面这种可以获得字符串的长度。
${parameter%word} 最小限度从后面截取word
${parameter%%word} 最大限度从后面截取word
${parameter#word} 最小限度从前面截取word
${parameter##word} 最大限度从前面截取word
# 上面4个就是用来截取字符串的方法了。
# 有了着四种用法就不必使用cut命令来截取字符串了
#第一种又可以分为四种情况,下面一一介绍。
#1、使用 # 号操作符。用途是从左边开始删除第一次出现子字符串即其左边字符,保留右边字符。用法为#*substr,例如:
str='http://www.你的域名.com/cut-string.html'
echo ${str#*//}
# 得到的结果为www.你的域名.com/cut-string.html,即删除从左边开始到第一个"//"及其左边所有字符
#2、使用 ## 号操作符。用途是从左边开始删除最后一次出现子字符串即其左边字符,保留右边 字符。用法为##*substr,例如:
str='http://www.你的域名.com/cut-string.html'
echo ${str##*/}
# 得到的结果为cut-string.html,即删除最后出现的"/"及其左边所有字符
#3、使用 % 号操作符。用途是从右边开始删除第一次出现子字符串即其右边字符,保留左边字符。用法为%substr*,例如:
str='http://www.你的域名.com/cut-string.html'
echo ${str%/*}
# 得到的结果为http://www.你的域名.com,即删除从右边开始到第一个"/"及其右边所有字符
#4、使用 %% 号操作符。用途是从右边开始删除最后一次出现子字符串即其右边字符,保留左边字符。用法为%%substr*,例如:
str='http://www.你的域名.com/cut-string.html'
echo ${str%%/*}
# 得到的结果为http://www.你的域名.com,即删除从右边开始到最后一个"/"及其右边所有字符
# 第二种也分为四种,分别介绍如下:
# 1、从左边第几个字符开始以及字符的个数,用法为:start:len,例如:
str='http://www.你的域名.com/cut-string.html'
echo ${var:0:5}
# 其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
# 结果是:http:
2、从左边第几个字符开始一直到结束,用法为:start,例如:
str='http://www.你的域名.com/cut-string.html'
echo ${var:7}
# 其中的 7 表示左边第8个字符开始
# 结果是:www.你的域名.com/cut-string.html
# 3、从右边第几个字符开始以及字符的个数,用法:0-start:len,例如:
str='http://www.你的域名.com/cut-string.html'
echo ${str:0-15:10}
# 其中的 0-6 表示右边算起第6个字符开始,10 表示字符的个数。
# 结果是:cut-string
# 4、从右边第几个字符开始一直到结束,用法:0-start,例如:
str='http://www.你的域名.com/cut-string.html'
echo ${str:0-4}
# 其中的 0-6 表示右边算起第6个字符开始,10 表示字符的个数。
# 结果是:html
# 注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)
```sh
函数参数传递
#!/bin/sh
SDCARD_BOOT=/media/chen_7109/boot
SDCARD_ALL=/media/chen_7109/*
# Copy image to sd card boot partition
mycptosd() {
cp am335x-sbc7109.dtb MLO u-boot.img uEnv_emmc.txt uEnv.txt zImage /media/chen_7109/boot/ -rf
sync
echo "Copy Image to sdcard over ....."
}
# The main function
main () {
if [ -e $SDCARD_BOOT ]; then
mycptosd
if [ 1 -eq $# ]; then
if [ "$1" = "umount" ]; then
sudo umount $SDCARD_ALL
else
echo "Please input arguments "umount" to umount sd card"
fi
else
echo "You can input arguments of "umount" to umount sd card"
fi
else
echo "No such file of sd card boot partition"
fi
}
# Main Start ....
if [ 1 -eq $# ];then
main $1
else
main
fi
上面这个脚本中,本来要传递到main的一个参数的,我一开始以为在shell 外面直接带一个参数就可以传到main()函数内部,
发现这样是不可以的,shell里面的函数调用的时候参数是独立的参数,所以只能用main $1 的方式将参数传递进去。
shell 脚本之获取命令输出字符串以及函数参数传递的更多相关文章
- shell脚本调用C语言之字符串切分函数——strtok
今天上午在写一个需求,要求的比较急,要求当天完成,我大致分析了一下,可以采用从shell脚本中插入一连串的日期,通过调用proc生成的可执行文件,将日期传入后台数据库,在数据库中进行计算.需要切分日期 ...
- shell脚本中sqlite3命令查询数据库失败返回空,并将错误信息打印到标准错误输出
shell脚本中sqlite3命令查询数据库失败返回空,并将错误信息打印到标准错误输出 如: #/bin/sh local ret='sqlite3 test.db "select test ...
- 通过web php 执行shell脚本,获取的结果与直接在命令行下获取的结果不同。
公司项目中的一项小功能,统计设备的连接数.其中用到shell脚本来获取已连接设备的统计.使用命令 /bin/netstat -an| grep ESTABLISHED | awk '{print $4 ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- 使用 shell 脚本自动获取发版指标数据
问题背景 大一点的公司都会建立一套规章流程来避免低级错误,例如合入代码前必需经过同行评审:上线前必需提测且通过 QA 验证:全量前必需经过 1%.5%.10%.20%.50% 的灰度过程.尤其是最后一 ...
- (转)shell脚本之seq命令
shell脚本之seq命令 原文:http://blog.csdn.net/paoxiaohui/article/details/52830595 seq 用于生成从一个数到另一个数之间的所有整数. ...
- shell脚本一条命令直接发送http请求(xjl456852原创)
我们知道nc命令是一个网络工具.可以连接tcp/udp.也能模拟发送http请求. 现在介绍通过shell脚本,一条命令直接发送http请求. 命令如下,可以对下面的地址等信息自行修改: #!/bin ...
- shell脚本调用C语言之字符串切分之strtok函数
今天上午在写一个需求,要求的比较急,要求当天完成,我大致分析了一下,可以采用从shell脚本中插入一连串的日期,通过调用proc生成的可执行文件,将日期传入后台数据库,在数据库中进行计算.需要切分日期 ...
- shell脚本中获取当前所在目录地址
shell脚本中获取当前所在目录如下 #!/bin/bash work_path=$() cd ${work_path} work_path=$(pwd) cd ${work_path}/src
随机推荐
- rpc框架之 thrift连接池实现
接前一篇rpc框架之HA/负载均衡构架设计 继续,写了一个简单的thrift 连接池: 先做点准备工作: package yjmyzz; public class ServerInfo { publi ...
- ASM, AAM
名称 下载网址 am_tools http://www.isbe.man.ac.uk/~bim/software/am_tools_doc/index.html VOSM http://sourcef ...
- redux middleware 的理解
前言 这几天看了redux middleware的运用与实现原理,写了一个百度搜索的demo,实现了类似redux-thunk和redux-logger中间件的功能. 项目地址:https://git ...
- Good Bye 2016 //智商再次下线,边界爆炸.....
A B很水就略了.. C.又是一次wannafly一样的判断区间的..... 边界设为2000000 正好GG...... fst的时候立马想到上次也是这么wa过的...... 所以下次遇到这种题 ...
- node.js的安装环境搭建
.header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { t ...
- fiddler手机抓包教程
序言 记录一下自己第一次使用fiddler抓取手机的信息,做一个备忘 实现步骤 一.首先设置一下fiddler,使其对HTTPS协议进行抓包 二.然后设置fidder使得fiddler支持远程计算机连 ...
- CSS基本知识6-CSS字体
首先要考虑的是文本的排版,实际上有这玩意,Word还需要吗?不需要了.我们列下文本所涉及的操作: CSS 文本属性 属性 描述 color 设置文本颜色 direction 设置文本方向. line- ...
- MyBatis参数传入集合之foreach用法
传入集合list // 账户类型包括门店和分公司 List<Object> scopeList = new ArrayList<Object>(); scopeList.add ...
- 使用css3 filter 实现移入背景变色效果
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
- 教你一招:Win10系统如何正确卸载edge浏览器?
Edge浏览器作为Win10系统默认浏览器,尽管我们将其他浏览器设置为默认程序,但是有时候还是会自动弹出,非常的不爽,但是在控制面板中却又找不到卸载“Edge”浏览器的选项.下面小编就教大家卸载“Ed ...