Linux系统shell使用几点摘录(二)

Shell脚本命令行参数说明

参数名称参数含义

$$表示Shell本身的PID(ProcessID)

$!表示Shell最后运行的后台Process的PID

$?表示最后运行的命令的结束代码(返回值)

$-表示使用Set命令设定的Flag一览

$*表示所有参数列表。如"$用「」括起来的情况、以*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。

$@表示所有参数列表。如"$用「」括起来的情况、以@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。

$#表示添加到Shell的参数个数

$0表示Shell本身的文件名

$1~$n表示添加到Shell的各参数值。$n是第n个参数

数组实例实现批量git push功能

#!/usr/bin/env bash

proList=("scripts" "cases" "dockerfiles" "benchmark" "testng")

#打印数组长度

echo ${#proList[@]}

BASE_DIR=/home/win/codes

#for 循环遍历

cd $BASE_DIR

for var in ${proList[@]};

do

    mkdir -p $BASE_DIR/$var

    cd  $BASE_DIR/$var && git init

    git remote add origin XXXXXX/gitrepo/$var.git

    git remote -v

    git pull origin master

    git push --set-upstream origin master

done

Shell常用语法

变量

(1)变量与变量内容以一个等号『=』来连结

(2)等号两边不能直接接空格符

(3)变量名称只能是英文字母与数字,但是开头字符不能是数字

(4)变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来

(5)可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符

(6)按照惯例,有两种类型的Shell变量:

a.环境变量:环境变量可以从父进程传给子进程,因此Shell进程的环境变量可以从当前Shell进程传给fork出来的子进程。用printenv命令可显示当前Shell进程的环境变量。

b.本地变量:只存在于当前Shell进程,用set命令可以显示当前Shell进程中定义的所有变量(包括本地变量和环境变量)和函数

(7)用export命令可以把本地变量导出为环境变量

(8)用unset命令可以删除已定义的环境变量或本地变量: unset VARNAME

范例一:找出 /etc/ 底下以 cron 为开头的档名

ll -d /etc/cron*    <==加上 -d 是为了仅显示目录而已

范例二:找出 /etc/ 底下文件名『刚好是五个字母』的文件名

ll -d /etc/?????    <==由于 ? 一定有一个,所以五个 ? 就对

范例三:找出 /etc/ 底下文件名含有数字的文件名

ll -d /etc/*[0-9]*  <==记得中括号左右两边均需 *

范例四:找出 /etc/ 底下,档名开头非为小写字母的文件名:

ll -d /etc/[^a-z]*  <==注意中括号左边没有 *

命令代换:``或 $()

DATE=`date`    echo $DATE   命令代换也可以用$()表示:DATE=$(date)

算术代换:$(())

$(())中只能用+-*/和()等运算符,且只能做整数运算   : VAR=45    echo $(($VAR+3))

字符串长度:${#string}

stringZ=abcABC123ABCabc     echo ${#stringZ} # 15

文件路径操作

假设我们定义了一个变量为:

file=/dir1/dir2/dir3/my.file.txt

我们可以用 ${ } 分别替换获得不同的值:

${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt

${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt

${file%.*}:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file

${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my

${file:0:5}:提取最左边的 5 个字节:/dir1

${file:5:5}:提取第 5 个字节右边的连续 5 个字节:/dir2

我们也可以对变量值里的字符串作替换:

${file/dir/path}:将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt

${file//dir/path}:将全部 dir 提换为 path:/path1/path2/path3/my.file.txt

利用 ${ } 还可针对不同的变量状态赋值(没设定、空值、非空值):

${file-my.file.txt} :假如 $file 没有设定,则使用 my.file.txt 作传回值。(空值及非空值时不作处理)

${file:-my.file.txt} :假如 $file 没有设定或为空值,则使用 my.file.txt 作传回值。 (非空值时不作处理)

${file+my.file.txt} :假如 $file 设为空值或非空值,均使用 my.file.txt 作传回值。(没设定时不作处理)

${file:+my.file.txt} :若 $file 为非空值,则使用 my.file.txt 作传回值。 (没设定及空值时不作处理)

${file=my.file.txt} :若 $file 没设定,则使用 my.file.txt 作传回值,同时将 $file 赋值为my.file.txt 。 (空值及非空值时不作处理)

${file:=my.file.txt} :若 $file 没设定或为空值,则使用 my.file.txt 作传回值,同时将 $file赋值为 my.file.txt 。 (非空值时不作处理)

${file?my.file.txt} :若 $file 没设定,则将 my.file.txt 输出至 STDERR。 (空值及非空值时不作处理)

${file:?my.file.txt} :若 $file 没设定或为空值,则将 my.file.txt 输出至 STDERR。 (非空值时不作处理)

条件判断

[ -d DIR ]              如果DIR存在并且是一个目录则为真

[ -f  FILE ]             如果FILE存在且是一个普通文件则为真

[ -z STRING ]           如果STRING的长度为零则为真

[ -n STRING ]           如果STRING的长度非零则为真

[ STRING1 = STRING2 ]   如果两个字符串相同则为真

[ STRING1 != STRING2 ]  如果字符串不相同则为真

[ ARG1 OP ARG2 ]        ARG1和ARG2应该是整数或者取值为整数的变量,OP是-eq(等于)-ne(不等于)-lt(小于)-le(小于等于)-gt(大于)-ge(大于等于)之中的一个

带与、或、非的测试命令

[ ! EXPR ] EXPR可以是上表中的任意一种测试条件,!表示逻辑反

[ EXPR1 -a EXPR2 ]  EXPR1和EXPR2可以是上面任意一种测试条件,-a表示逻辑与

[ EXPR1 -o EXPR2 ]  EXPR1和EXPR2可以是上面任意一种测试条件,-o表示逻辑或

备注

windows下编写的shell脚本可能无法运行,通过如下方式将脚本变成unix下编码文件:

方式1:set ff=unix     进行unix格式的转换;

方式2: dos2unix   XX.sh 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容