Shell脚本学习笔记

时间:2021-09-14 15:37:40

格式:

#! /bin/bash

...

exit 0

Linux(Ubuntu)默认使用bash程序,其中exit 0表示脚本执行成功

 

与终端交互

#从终端读取参数,会从当前行阻塞

read var

#向终端打印hello

echo “hello”

 

Shell系统变量

$? :表示保存前一个命令的返回值

$0 :当前程序名

$1 :第一个参数

$2 :第二个参数

$n :第n个参数

$# :保存参数的个数

$*  : 以("$1   $2    ")的形式保存所有输入的命令行参数(保留输入区分隔符)

$@ : 以("$1"   "$2"  …)的形式保存所有输入的命令行参数(不保留输入区分隔符)

 

$HOME  当前用户的登录目录

$PATH   当前系统命令的搜索目录清点

$PS1    命令提示符,通常是“$”字符

$PS2    辅助提示符,通常是“>”字符

$IFS    输入区的分割符,通常是空格、制表符、换行符.

 

定义变量并取值

var=hello   注意这里赋值时必须要紧挨着等号,否则会不认识

$var :表示取变量值: hello

${var}  :也是取变量的值:hello ,之所以带花括号,是为了区别变量名与字符串中内容冲突的情况

                   var=hello

                   echo "${var}iable"            这种情况打印:helloiable

                   echo "$variable"                这种情况打印为空字符串,因为variable变量我们没有定义


加入我们之前定了var变量,我们又想打印"$var"这个字面值,而不是打印变量var的内容,我们应该在$前面使用转义符"\"

\${var}    :将打印"${var}"

\$var     :将打印"$var"


i=`expr $i + 1`     :取变量i的值并加1,然后赋值给i,注意这里使用的是反引号而不是单引号

$(($i+1))              :与上边的效果相同,也是表达式赋值


var=$(cmd 参数)  : 执行系统命令,将其打印的结果保存到var变量中

                     其中cmdLinux系统的shell命令

 字符串判断表达式

相等 str  =  str2 注意这里 两个字符串与等号隔开,否则会认为是赋值
不等 str  !=  Str2
非空 N  str
空 Z  str
算数表达式
相等   data1  eq  data2
不相等 data1  Ne  data2
对文件的操作
为目录文件 -d file
是否为空文件  -s file
文件存在 -e file
普通文件存在 -f file

是否设置了组权限、用户权限

-g file
-u file

是否可读、可写、可执行

-r file
-w file
-x file

条件语句

if [ expression ]                 # 中括号内必须为表达式expression

then

    echo “123”

else

    echo "456"

fi

 test 命令替代中括号

if test -f android.c                

then

    echo "exist"

else

    echo "not exist"

fi

 

echo "please input yes/no"

read var

if [ ${var} = "yes" ] 

then

    echo "data yes"

elif [ ${var} = "no" ]

then

    echo "data no"

else

    echo "input data is: "${var}

fi

 For循环语句

for item in ${list}           #循环从list中读取到item变量中

do

    echo ${item}

done

 While 循环

while [ “123” = “123” ]

do

      echo “hello”

done

 分之语句

case ${var} in

"yes") echo "world";; #注意这里必须双分号结束.

"no") echo "hello";;

*) echo "****";;      #匹配所有字符串,必须放到最后面

esac

 Until语句

read var

until [ $var = "hello" ]      条件为真则跳出循环

do

    read var

done

 函数

function_name()

{

    echo “第一个参数$1”

    echo “第二个参数$2”

    echo “第三个参数$3”

}

#调用函数,并传递三个参数,函数必须在调用前定义,且必须有函数体.

function_name 1 2 3

*脚本调试

sh -n <script> 检查脚本语法是否有错
sh -v <script> 执行每条脚本语句前,并打印本条脚本语句,并回显执行结果
sh -x <script> 执行每条脚本语句后,并打印本条脚本语句,并回显执行结果