Linux Shell 编程语法

Shell 编程

变量

1.变量赋值方式

a) var=value #这种赋值方式需要value没有空格符号

b) var=”value” #包含空格的变量可以这样赋值

2.变量应用:$变量名

3.环境变量

a) HOME

b) PWD

c) USER

d) UID

e) SHELL

4.字符串长度获取:length=${#var}

5.获取命令输出,将其存入变量中的语法

a) getstring=$(cmd | cmd) #称为subshell

echo $getstring

例如:

val=$(ls -la)

echo $val

b) getstring=`cmd` #反引用

echo $getstring

数学运算

1、let: 可直接执行基本的算数操作

a) val=3 \ let val--

2、[ ]:

a) result=$[ $val + 19 ]

3、( ( ) ):

a) result=$( ($val + 19 ) )

4、精密数学运算bc

a) echo “2 * 0.2” | bc

命令语法

1.for循环

格式1

for var in list

do

command; #使用变量$var

done

格式2

for((i=0;i<10;i++))

{

command; #使用变量$i

}

2.while循环

while condition

do

command;

done

true能产生无限循环

3.until循环:一直循环直到给定条件为真

x=0;

until [ $x -eq 9 ];

do let x++;

done

4.比较与测试

a) if

if condition;

then

commands;

fi

 

if condition;

then

commands;

elif conditions;

then

commands

else

commands

fi

 

b) [ condition ] && action;#条件为真执行

c) [ condition ] || action; #条件假执行

d) 算数比较 [ $var -eq 0 ]

i. -gt :大于

ii. -lt:小于

iii. -ge:大于或等于

iv. -le:小于或等于

e) 文件测试

i. [ -f $file_val ]:如果给定的变量包含的文件可执行,则返回真

ii. [ -x $var ]:如果给定的变量包含的文件可执行,返回真

iii. -d:如果给定的变量包含的是目录,返回真

iv. -e:如果给定的变量包含的文件存在,返回真

v. -c:如果给定变量包含的是一个字符设备文件的路径,返回真

vi. -b:如果给定变量是一个块设备路径,返回真

vii. -w:可写为真

viii. -r:可读为真

ix. -L:给定变量包含的是一个符号链接,返回真

f) 字符串比较

i. [ [ $str1 = $str2 ] ]=等价=[ [ $str1 ==$str2 ] ]:

ii. [ [ $str1 != $str2 ] ]:不等为真

iii. [ [ $str1 > $str2 ] ]

iv. [ [ $str1 < $str2 ] ]

v. [ [ -z $str2 ] ]:如果str2包含的是空字符串,则返回真

vi. [ [ -n $str2 ] ]:如果str2包含的是非空字符串,则返回真

5.

函数定义

1、定义

function fname()

{

statements;

}

2、调用:

a) fname; #执行函数

b) fname arg1 arg2 ; #传递参数

3、参数说明

function fname()

{

echo $1,$2; #用于访问参数1,2,既调用时传递进来的参数

echo “$@”; #以列表方式一次性打印所有参数

echo ”$*”; #将所有参数拼接成当个字符串

return 0; #返回

}

 

语法熟悉了,最近一直在重复着创建文档这种机械工作,想了一下,既然学了shell ,那就操起小刀动起来吧。

其中用到了shell的一些命令工具,到时有空再来整理整理....

 

应用编程

#!/bin/sh

#作者:hntea

#时间:2016/3/14

 

###############################################################################

#脚本功能说明

#

# 1、查看当前是否存在驱动文件;否则调用make编译,是则将其复制到指定目录下

# 2、查看当前是否存在应用文件;否跳过,存在则编译并将生成的文件复制到指定目录

# 3、查看指定目录是否存在,否则以固定格式创建目录 lesson<X>-<drivername>

#

##############################################################################

 

 

_DEBUG=on

#定义调试函数,调用脚本定义_DEBUG=on 可以启动调试打印功能

#$@:用于告诉脚本执行后面的所有命令

#:用于告诉脚本不要进行任何操作

function DEBUG()

{

[ "$_DEBUG" == "on" ] && $@ || :

}

 

 

################################################

#变量说明

# ARCH_KO:存放驱动文件名

# ARCH_APP:存放应用文件名

# ARCH_DIR:文件去向路径

#   dirlist:目标路径子目录列表【字符串】

################################################

ARCH_KO=$(ls $PWD | grep *.ko )

ARCH_APP=$(ls $PWD | grep *app.c)

ARCH_DIR=/hntea/lesson/kernel-and-driver/lesson3-make_filesystem/rootfs/lesson

 

#获取子目录列表

dirlist=`ls $ARCH_DIR| grep lesson`;

 

 

 

################################################

#函数名:get_koname OK

#函数功能:获取驱动文件

#输出参数:

# 成功:驱动名

# 失败:空字符

################################################

function get_koname()

{

#判断是否存在APP文件,字符串不为空为真

if [[ -n $ARCH_KO ]];

#存在

then

#获取文件名法一:

name=${ARCH_KO%.ko}; #%操作符可以将 “名称.扩展名”格式的文件名提取出来,原理是从从又到左删除字符,直到遇到.

#获取文件名法二

#neme=$`echo $ARCH_APP | tr -d '.c'`;

else

#不存在

name= ; #空字符串

fi

echo "$name";

}

 

################################################

#函数名:get_dirnum OK

#函数功能:获取子目录最大编号

#输出参数:

# 成功:当前子目录最大编号

# 失败:0

################################################

function get_dirnum()

{

dirmaxnum=0;

#从目录列表中截取数字列表

numlist=$(echo "$dirlist" | tr -d -c '0-9 \n');

#查询列表最大值

for var in $numlist;

do

#写法一:

# if [ $var -gt $dirmaxnum ];

# then

# dirmaxnum=$var;

# fi

#写法二:

[[ $var -gt $dirmaxnum ]] && dirmaxnum=$var;   

done

#输出最大值

echo $dirmaxnum;

}

 

################################################

#函数名:get_appname

#函数功能:获取APP文件前缀

#输出参数:

# 成功:APP

# 失败:空字符

################################################

function get_appname()

{

#判断是否存在APP文件,字符串不为空为真

if [[ -n $ARCH_APP ]];

#存在

then

#获取文件名法一:

name=${ARCH_APP%.c}; #%操作符可以将 “名称.扩展名”格式的文件名提取出来

#获取文件名法二

#neme=$`echo $ARCH_APP | tr -d '.c'`;

else

#不存在

name= ; #空字符串

fi

echo "$name";

}

 

################################################

#函数名:subdir_build OK

#函数功能:在指定目录下ARCH_DIR下创建子目录

#输出参数:

#   该函数没问题

################################################

 

function GO_build()

{

#获取目录下子目录的最大值

max=`get_dirnum`

koname=`get_koname`

appname=`get_appname`

if [[ -z $koname ]];

then

   echo "驱动文件不存在,请编译好驱动再执行该脚本! 脚本终止";

 exit 0;

fi

    #匹配存在最大值子目录名

echo "该课时主要完成 $koname 驱动..........."

    #遍历子目录列表

    for var in $dirlist

    do

       #匹配存在最大值子目录名

       whichdir=`echo $var | tr -d -c '0-9 \n'` ;

       if [ $whichdir -eq $max ];

       then

           whichdir=$var;

           echo "最大子目录名字:$whichdir";

           getdir=$var;  

fi

    done

          

    #截取存在最大值子目录名的后半部

    wdir_name=${getdir#*-};

    echo "最大值的子目录的后半部:$wdir_name"

    #判断是否与驱动名相等

    if [[ $wdir_name != $koname ]]

    then

      let max++;

        echo "接下来为第 $max 课时"

    #目录合成

      desname=`echo $ARCH_DIR/lesson$max-$koname`

      echo "正在建立新课时 $desname..........."

      mkdir $desname;

  echo "$ARCH_DIR/ 下建立 $desname 目录完毕...."

  echo "干的漂亮!"

else

  echo "$max 课时还在进行,加紧了亲!"

  echo "子目录已经存在"

  desname=`echo $ARCH_DIR/lesson$max-$koname`

    fi

 

#文件复制

if [ -z $appname ];

then

echo "没有相应的上层应用程序...."

else

echo "应用软件名为:$ARCH_APP"

arm-linux-gcc -static $ARCH_APP -o $appname

echo "应用软件编译完成,正在复制带指定目录...$desname"

cp $PWD/$appname $desname/

echo "复制成功"

fi

 

echo "将驱动文件复制到$ARCH_DIR/$desname 目录下"

cp $ARCH_KO $desname/

echo "复制成功"

}

 

GO_build

 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值