美文网首页
Linux系统shell使用几点摘录(二)

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

作者: 佛系小懒 | 来源:发表于2020-02-02 15:31 被阅读0次

    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 

    相关文章

      网友评论

          本文标题:Linux系统shell使用几点摘录(二)

          本文链接:https://www.haomeiwen.com/subject/jtjqxhtx.html