shell script基础

来源:互联网 发布:软件开发学徒骗局 编辑:程序博客网 时间:2024/05/23 20:33

shell前面需写上#!/bin/bash
可以用echo向屏幕中输出内容,加上-e后可使用转义符
eg echo -e “Hello World\n\a”

用read可以读取输入内容

shell script中可以进行运算,但是记得每个变量类型是字符串。所以进行运算时需要声明
declare -i sum= num1+num2
或者直接写作sum=$((num1+num2))

判断表达式

可以用test来进行判断。

test 选项 内容常用的选项有:-e 文件是否存在-f 是否是文件-d 是否是目录-z 该字符串是否为空字符串,如果是则返回true两数值比较的:eg test n1 -eq n2-eq 两数值是否相等-ne 两数值是否不等-gt n1大于n2-lt n1小于n2-ge n1大于且等于n2-le n1小于且等于n2
#这里说一下&& 和 ||command1 && command2#当command1执行为真,command2才会被执行。command1 || command2#与&&相反,当command1执行为假,command2才会被执行。如果command1执行为真则command2不执行

test一般与shell中的&&和||搭配着用。但是在一些场景使用起来还是比较复杂。所以还有if..fi和case..esac判断式

if [ "$choice" == "yes" ];then...fi#注意这里在[]两边都需要加空格,并且变量choice需要用""括起。fi表示终止if括起的范围多判断:if [ "$choice" == "yes" ];then...else...fi或if [ "$choice" == "yes" ];then...elif [ "$choice" == "no" ] || [ "$choice" == "NO" ];then ...else...fi
case:#以case $变量 in开始,以esac结束case#注意每一个分支需要用"...")表示,用;;表示这个分支的结束。*)表示其他分支,类似于c语言中case语句的default。case $choice in    "yes")        ...        ;;    "no")           ...        ;;    *)        ...         ;;esac

循环表达式

循环表达式有while和until,以及for循环。其使用方法与c语言中的类似。

#注意这里的[]中用到判断表达式需要用test中的判断while [ ]do ...donefor var in con1 con2 con3...do ...done#这里的con1和con2...将会赋值给var。执行次数便是con的个数。默认eg1.for s in one two threedoecho -e  "lord i am $s"done#上面那个感觉还是挺麻烦的,如果我要列1..100,那我岂不是要写到100个参数#所以有另一种方法通过$(seq 1 10)表示由1到100连续的。默认步长为1#如需要改变,则用by关键字eg2.net=198.0.0for sit in $(seq 1 10)do        echo -e "your ip is $net.$sit\n"done#类似c语言中的for循环for ((初始化;限定条件;自增表达式))do...done

shell script的参数

我们可以在调用sh时将外部参数传入到程序中。

#同时我们可以在文件中调用外部传入的参数$0即是文件名,$1是第一个参数$@是所有参数,$#是参数的个数eg../filesh.sh abc #shell文件名为filesh.sh,参数为abc文件内容如下:echo  "your arguement is $@"echo "filename is $0"echo "file arguement $#"echo "first arguement $1"

function函数

与c语言类似,shell script也有函数功能。可以实现对代码的重用性。

function fname(){...}#这里需要注意的是,因为shell script是由上到下,由左到右执行,所以函数需放在调用其前面。函数也可以拥有内置变量$1..但是这个内置变量是参照于调用其的地方

script的调试

最后,编写完shell后,如果对shell script的正确性有疑问的话,可以对shell进行调试。

sh [-nvx]  script.sh-n 不执行script,仅查询语法问题,如果没有问题则没有输出-v 在执行script前,将内容输出-x 将输出步骤输出

script的执行

注意有几种script的执行方式

./test.shsh test.shsource test.sh#这三种虽然都是执行shellscript,但是都有区别。前两种执行是另开一个子bash中执行的,所以其中script中定义的变量在父bash中便没有了。而source是直接在父bash中执行的。所以如果执行这个script后想在父bash中使用里面的变量的话,需用source执行.
0 0