shell基础知识

For循环基本语法

#语法1

for 变量名 in 值1 值2 值3。。。

do

    程序

done

#语法二

for ((初始值;循环控制条件;变量变化))

do

    程序

done

while 循环

while [ 条件判断 ]

do

    程序

done

Case分支

case $变量名 in 

"值1")

  如果变量值等于1,则执行此程序

       ;;

"值2")

  如果变量值等于2,则执行此程序

        ;;

*)

     如果变量值不等于以上列出的值,则执行此程序

    ;;

esac

If语句

if [ 条件判断式 ];then

    程序

fi

#或者(推荐)

if [ 条件判断式 ];then

    程序

elif [ 条件判断式 ];then

   程序

fi

变量定义

定义变量:变量名=变量值,等号两边不能有空格,变量名一般习惯大写。使用变量:$变量名

将命令返回值赋值给变量:

A=`ls`反引号,执行里面的命令

A=$(ls)等价于反引号

获取变量最好加上双引号如echo "$var"

变量的作用域

默认情况下,shell里,定义的变量是全局变量,如果需要使用local变量,需要使用关键字local,声明为local的变量,在函数体内可以调用,函数外,不能调用。declare可以定义局部变量的类型,如数组,字符串,整形等。

 返回值

shell中函数的返回值只能是整数,如0,1,如果非要传递字符串,可以用下面的方法

(一)函数位置参数调用,打印返回值。reg=$(函数名 参数1 参数2) echo $reg。

hellow=$1,world=$2

运行结果:

 (二)脚本位置参数传递到函数

 or

 运行结果:

位置参数变量

$n:$0表示shell脚本本身的文件名.,如/a.sh,$1-$9代表第1到第9个参数,10以上用${}表示

$*:命令行所有参数,且把每个参数整体对待

$@:命令行所有参数,且把每个参数区分对待

$#:所有参数的个数

运算符$(())和$[]区别

都是运行算数运算,没有区别

 函数

系统函数:basename,dirname

basename:用户获取文件名,删掉最后一个/前的所有部分,包括/。

dirname:用于获取路径,删掉路径最后一个/后的多有部分,包括/.

 自定义函数

[ function ] funname(){

    Action;

    [return int;]

}

#调用

funname 参数1 参数2

我们可以实现python里的脚本结构:

#python

def func1():

  pass

def func2():

  pass

if  __name__=='__main__':

func1()

func2()

#shell

#!/bin/bash

func1(){

}

func2(){

}

main(){

func1

func2

}

main "$@"

$*和$@的用法区别

他们在for循环里的用法没有区别,如果是带命令行参数就有区别。$*表示当作一个整体,$@表示单独一个个体。

#!/bin/bash
for i in "$*"
do

echo "this arg is $i"

done

#!/bin/bash
for i in "$@"
do

echo "this arg is $i"

done

运行结果

 事后处理函数

有些时候,我们执行完脚本后,会产生一些临时文件,我们不必在脚本里rm -rf filename来一个个删除,我们可以定义一个函数来删除。然后,在需要执行的脚本最后调用这个脚本的函数即可。

 Tip

读取文件时不要使用for loop而要使用while read

尽量使用func(){}定义行数

尽量使用$()将命令的返回值赋值给变量,而不是反引号

在复杂的场景下尽量使用printf代替echo进行回显

尽量使用[[]]来代替[]

原文地址:https://www.cnblogs.com/maisha/p/13091403.html