shell脚本

Shell中的${}、##和%%使用范例

偶尔善良 提交于 2019-12-25 03:10:18
今天看一个脚本文件的时候有一些地方不太懂,找了一篇文章看了一些,觉得不错,保留下来。 假设我们定义了一个变量为: 复制代码 代码如下: file=/dir1/dir2/dir3/my.file.txt 可以用${ }分别替换得到不同的值: 复制代码 代码如下: ${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:删掉最后一个 / 及其左边的字符串:my.file.txt ${file#*.}:删掉第一个 . 及其左边的字符串:file.txt ${file##*.}:删掉最后一个 . 及其左边的字符串:txt ${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3 ${file%%/*}:删掉第一个 / 及其右边的字符串:(空值) ${file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file ${file%%.*}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my 记忆的方法为: 复制代码 代码如下: # 是 去掉左边(键盘上#在 $ 的左边) %是去掉右边(键盘上% 在$ 的右边) 单一符号是最小匹配;两个符号是最大匹配 ${file:0:5}:提取最左边的 5 个字节:/dir1 ${file:5

shell脚本字符串截取

徘徊边缘 提交于 2019-12-25 03:08:51
假设有变量 var=http://www.google.com/test.htm 一 # 号截取,删除左边字符,保留右边字符。 echo ${var#*//} 其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符 即删除 http:// 结果是 : www.google.com/test.htm 二 ## 号截取,删除左边字符,保留右边字符。 echo ${var##*/} ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符 即删除 http://www.google.com/ 结果是 test.htm 三 %号截取,删除右边字符,保留左边字符 echo ${var%/*} %/* 表示从右边开始,删除第一个 / 号及右边的字符 结果是: http://www.google.com 四 %% 号截取,删除右边字符,保留左边字符 echo ${var%%/*} %%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符 结果是:http: 五 从左边第几个字符开始,及字符的个数 echo ${var:0:5} 其中的 0 表示左边第一个字符开始,5 表示字符的总个数。 结果是:http: 六 从左边第几个字符开始,一直到结束。 echo ${var:7} 其中的 7 表示左边第8个字符开始,一直到结束。

Linux Bash Shell字符串截取

为君一笑 提交于 2019-12-25 03:08:36
#!/bin/bash #定义变量赋值时等号两边不能有空格,否则会报命令不存在 # 运行shell脚本两种方式 # 1、作为解释参数 /bin/sh test.sh ; 2、作为可执行文件 chmod +x ./test.sh blog_url='http://www.cnblogs.com/Bighua/p/7535900.html' # 1、 #号截取,从左往右删除从0开始到第一个匹配条件('//')部分,保留剩下部分 echo ${blog_url#*//} #运行结果 如下 www.cnblogs.com/Bighua/p/7535900.html #2、 ##号截取,从左往右删除从0开始到最后一个匹配条件('/')部分,保留剩下部分 echo ${blog_url##*/} #运行结果如下 7535900.html #3、 %号截取,从右往左删除从#blog_url开始到第一个匹配条件('/')部分,保留剩下部分 echo ${blog_url%/*} # 运行结果如下 http://www.cnblogs.com/Bighua/p #4、 %%号截取,从右往左删除从#blog_url开始到最后一个匹配条件('/')部分,保留剩下部分 echo ${blog_url%%/*} # 运行结果如下 http: #5、从左边第几个开始截取几个字符 echo ${blog_url

shell 实现war包的配置更新和自动发布

二次信任 提交于 2019-12-24 21:03:58
此脚本主要用来实现非maven tomcat项目的war包手动发布, 1、将测试war包上传至指定目录 2、备份目前生产代码 3、自动配置文件替换 4、新版本代码的发布 #!/bin/bash ############Setup basic path and configuration file name ######################### date=`date +%Y%m%d` tomcat_home=/usr/local/kencery/tomcat app_name=bqjr_fss backup_home=~/appbak app_home=$tomcat_home/webapps/$app_name upload_war_home=/home/bqadm/deploy_directory declare -a config_file=(WEB-INF/classes/dbconfig.properties WEB-INF/classes/global.properties WEB-INF/classes/mq.properties WEB-INF/classes/sso.properties WEB-INF/classes/config.properties WEB-INF/classes/log4j.properties WEB-INF/classes

shell特殊变量,记录一下

自作多情 提交于 2019-12-24 14:05:16
$0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 $# 传递给脚本或函数的参数个数。 $* 传递给脚本或函数的所有参数。 $@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。 $? 上个命令的退出状态,或函数的返回值。 $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 来源: https://www.cnblogs.com/erhu-67786482/p/8706805.html

shell @ Linux (1)

前提是你 提交于 2019-12-24 12:00:14
开始学习Shell,管理自己的Linux。 跟随着编程语言的脚步,开始自己的Shell之旅。 1.Shell的种类 目前流行的Shell有ash, bash, ksh, csh, zsh等,目前Linux内置的Shell一般为bash,可以用 #echo $SHELL 来查看所使用的shell类型。 Bourne Again shell,它是Bourne shell的扩展,简称Bash,与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多C shell和Korn shell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。 2.Shell脚本 Shell脚本的格式如下 #!/bin/sh #comments Your commands go here 首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上\,这个符号表明下一行与此行会合并为同一行。 将文件存盘后

Shell基本命令

岁酱吖の 提交于 2019-12-24 09:25:49
Linux命令行的组成结构 Linux系统命令操作语法格式 命令 空格 参数 空格 (文件或路径) 需要处理的内容 rm -rf /tmp/* ls -la /home 1.一般情况下,【参数】是可选的,一些情况下【文件或路径】也是可选的 2.参数 > 同一个命令,跟上不同的参数执行不同的功能 执行linux命令, 添加参数的目的是让命令更加贴切实际工作的需要 linux命令, 参数之间,普遍应该用一个或多个空格分隔! 创建一个目录 /oldboy windows下: 鼠标右击 > 新建文件夹 Linux下: 复制代码 make directory > mk dir > mkdir ------------------------------- mkdir /oldboy ------------------------------- cd / mkdir oldboy #递归创建a/b c/d mkdir -p a/b c/d #递归创建test/a,b,c,d四个目录 mkdir -p test/{a,b,c,d} #递归创建文件夹a/b/c/d/e mkdir -p a/b/c/d/e 查看目录 /oldboy #显示/oldboy下的内容 ls /oldboy 改变当前的目录/位置 cd /home cd ~ cd 打印当前工作目录 #打印当前工作目录 pwd

shell学习:几道常见shell习题

限于喜欢 提交于 2019-12-24 04:38:23
1. 编写 shell 脚本,计算 1-100 的和; 1 #! /bin/bash 2 sum=0 3 for i in `seq 1 100`; do 4 sum=$[$i+$sum] 5 done 6 echo $sum 计算-00和 2. 编写 shell 脚本,要求输入一个数字,然后计算出从 1 到输入数字的和,要求,如果输入的数字小于 1 ,则重新输入,直到输入正确的数字为止; 1 #! /bin/bash 2 n=0 3 while [ $n -lt "1" ]; do 4 read -p "Please input a number, it must greater than "1":" n 5 done 6 7 sum=0 8 for i in `seq 1 $n`; do 9 sum=$[$i+$sum] 10 done 11 echo $sum 12 13 判断输入数字 3. 编写 shell 脚本,把 /root/ 目录下的所有目录(只需要一级)拷贝到 /tmp/ 目录下; 1 #! /bin/bash 2 for f in `ls /root/`; do 3 if [ -d $f ] ; then 4 cp -r $f /tmp/ 5 fi 6 done 拷贝目录 4. 编写 shell 脚本,批量建立用户 user_00, user_01, …

Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

ぃ、小莉子 提交于 2019-12-24 04:35:06
前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。 例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 $# 传递给脚本或函数的参数个数。 $* 传递给脚本或函数的所有参数。 $@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。 $? 上个命令的退出状态,或函数的返回值。 $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 命令行参数 运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。 请看下面的脚本: #!/bin/bash echo "File name: $0" echo "First Parameter : $1" echo "Second Parameter : $2" echo "Quoted Values: $@" echo "Quoted Values: $*" echo "Total Number of Parameters:$#" 运行结果: bash shell

Linux Shell——函数的使用

匆匆过客 提交于 2019-12-24 04:33:53
文/一介书生,一枚码农。 scripts are for lazy people. 函数是存在内存里的一组代码的命名的元素。函数创建于脚本运行环境之中,并且可以执行。 函数的语法结构为: function <function-name> { <code to execute> } 创建函数不需要 do 或 done 这些关键字,只需要大括号来界定函数的作用范围。 我们可以在命令行中创建一个简单的函数: function show_system { echo "The uptime is:" uptime echo echo "Current dir:" pwd echo echo "Date:" date } 在命令行定义上面的函数: 然后执行函数: 最后,我们可以使用 type 命令查看函数的定义: 方法可以有传递的参数。在此之前,我们先简单介绍 sed 命令,下面的脚本用来移除文件中的注释行和空白行。 sed -i.bak '/^\s*#/d;/^$/d' <filename> 详细介绍一下上面的脚本: sed -i.bak :sed 命令会创建一个以 .bak 结尾的备份文件,用来备份原始的文件。 /^ :表示行首。 \s* :匹配任何不可见字符,包括空格、制表符、换页符等。 #/ :shell 脚本中的注释标记。 /^\s*#/