Shell编程快速入门

    科技2024-06-11  71

    Shell 编程学习笔记——初探shell语法

    如何使用bash执行脚本

    bash < test.shbash test.sh // bash 脚本名 [参数]./test.sh // 这种方式会使用脚本内的#! 后面的参数 比如#! /bin/bash -v 相当于 bash test.sh -v. test.sh // · ex3[参数]

    变量赋值

    dir = `pwd`dir = $(pwd) // $(命令表)

    数组

    Bash 只提供一维数组,并且没有限定数组的大小。类似与 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标。下标可以是整数或算术表达式,其值应大于或等于 0 。用户可以使用赋值语句对数组变量赋值。

    赋值, 数组名[下标]

    city[0] = beijing // 此处有坑, 等号两边不能加空格

    city[1] = shanghai

    city[2] = shenzhen

    显示声明数组 declare -a 数组名

    declare -a city

    访问, ${数组名[下标]}

    echo ${city[0]}

    echo ${city[1]}

    组合赋值(初始化)。格式:数组名=(值1 值2 值3)

    city=(beijing shanghai shenzhen)

    tianxu@DLC00078F8D43D:/mnt/c/Users/xu.tian/shellScript$ echo ${city[2]} ${city[0]} shenzhen beijing

    访问数组所有元素。 使用*和@

    $ echo ${city[*]} beijing shanghai shenzhen echo ${city[@]} beijing shanghai shenzhen

    获取数组元素个数

    echo ${#shell[*]}

    传递参数方式一, 在shell脚本中使用$1, $2这样的格式使用参数,其中1和2的编号分别对应用户传进来的参数的顺序,例如:bash add.sh 1 2

    编写脚本add.sh

    let sum=$1+$2 echo $sum

    传递参数执行脚本

    $ bash add.sh 10 11 21

    传递参数方式二,自定义参数名称

    修改脚本add.sh

    let sum=$X+$Y echo $sum

    传递参数执行脚本

    $ X=10 Y=11 ./add.sh 21

    使用这种语法是可以的,也尝试过使用bash add.sh X=10 Y=11 和 ./add.sh X=10 Y=11都会报错

    设置环境变量

    export myhome=/home/myhome

    键盘输入值

    编写脚本input.sh

    #! /bin/bash read -p "请输入一个数值:" num echo "你输入的数值是:" ${num}

    执行脚本

    $ ./input.sh 请输入一个数值:111 你输入的数值是: 111

    设值变量只允许读

    tianxu@DLC00078F8D43D:/mnt/c/Users/xu.tian/shellScript$ java_home=java tianxu@DLC00078F8D43D:/mnt/c/Users/xu.tian/shellScript$ readonly java_home tianxu@DLC00078F8D43D:/mnt/c/Users/xu.tian/shellScript$ java_home=ss -bash: java_home: readonly variable

    条件测试命令——test

    语法:test 表达式 如果表达式为真,则返回真,否则,返回假。

    数值比较

    -eg ==;-ne !=;-gt >;-ge >=;-lt <;-le <=

    测试文件属性

    文件的可读、可写、可执行,是否为普通文件,是否为目录分别对应:

    -r; -w; -x; -f; -d $ test -r filename

    字符串

    非空 -n , 空 -z可以使用 = 或者 != 以及 < 等符号按照字典序比较

    运算符

    可用该命令进行的运算有:

    算术运算:+ - * / %;逻辑运算:= ! < <= > >=

    如:

    $ i=5;expr $i+5

    另外,bc 是一个命令行计算器,可以进行一些算术计算。

    流程控制

    if分支, 输入一个路径,判断该路径是文件还是文件夹,输出当前文件,或文件夹下的所有内容

    #! /bin/bash if test -f $1; then echo "是一个文件" cat $1 elif test -d $1; then echo "进入了文件夹" $1 cd $1 && cat * else echo "not a file or dir" fi

    case分支,输入一个数字,判断是星期几

    #! /bin/bash case $1 in 1) echo "周一";; 2) echo "周二";; 3) echo "周三";; *) echo "随便周几吧。";; esac

    while循环, 写一个死循环,直到用户输入Y|y时退出

    #! /bin/bash while [ $input!="Y" ] && [ $input!="y" ] do echo "break loop?" read input case $input in (y|Y) break;; (n|N) continue;; esac done

    for循环, 计算1到10的和

    #! /bin/bash sum=0 for((i=1;i<=10;i++)); do sum=$[$sum+$i] done echo $sum

    计算斐波那契1

    #! /bin/bash fib[0]=1 fib[1]=1 for((i=2;i<10;i++)); do ((fib[$i]=fib[$i-1]+fib[$i-2])) done echo ${fib[*]}

    计算斐波那契2

    #! /bin/bash fib[0]=1 fib[1]=1 for((i=2;i<10;i++)); do let fib[$i]=fib[$i-1]+fib[$i-2] done echo ${fib[*]}

    for_in 1

    #! /bin/bash for i in {1..10} do echo $(($i * 3 + 1)); done

    for_in 2

    #! /bin/bash arr=$(seq 1 10) echo ${arr[*]} for i in $arr do echo $(($i * 3 + 1)) done

    for_copy

    #! /bin/bash files=$(ls) for filename in $files do cp $filename $filename".old" done

    for_rm (这个是因为之前for_copy的时候不小心把copy的文件带了一个+号,所以删掉带+号的文件,后来又修改了copy的代码 就是上面的那个)

    #! /bin/bash files=$(ls) for filename in $files do case $filename in *+*) rm $filename ;; esac done
    Processed: 0.027, SQL: 8