linux编写shell脚本程序(linux脚本编写教程)
linux编写shell脚本程序(linux脚本编写教程)
2024-11-08 01:29:42  作者:累累累累  网址:https://m.xinb2b.cn/know/epg315466.html
目录

Shell

Shell脚本的执行

Shell脚本编写规范

Shell 中的变量

变量的算术运算

双小括号 (()) 数值运算命令的用法

let 运算命令的用法

expr 命令的用法

br 命令的用法

$[] 符号的运算示例

Shell脚本的条件测试

几种条件测试语句

文件测试操作符

字符串测试操作符

整数二元比较操作符

逻辑操作符

测试表达式 test 、[] 、[[]] 、 (()) 的区别

if 条件判断语句

case 条件判断语句

for循环语句

while循环语句

Break、Continue、exit 循环控制语句

Shell脚本执行scrapy爬虫和python脚本

Shell

Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等。 用户每输入一条命令,Shell就执行一条。这种从键盘输入命令,就可以立即得到回应的对话方式,称为交互的方式。

当命令或程序语句不在命令行下执行,而是通过一个程序文件来执行时,该程序文件就被称为Shell脚本。 在Shell脚本里内置了很多命令、语句及循环控制,然后将这些命令一次性执行完毕,这种通过文件执行脚本的方式称为非交互的方式。 Shell脚本语言很适合用于处理纯文本型的数据,而Linux系统中几乎所有的配置文件、日志文件,以及绝大对数的启动文件都是纯文本类型的文件。

实验一

利用case语句编写脚本,满足下列要求

1.执行create时根据userfile和passfile建立用户

2.执行delete时根据userfile删除用户

1.编写脚本:

[root@localhost mnt]# vim user_ctrl.sh

#!/bin/bash

read -p “Please input the operation (create or delete ): ” OPERATION

//输入你要执行的动作

case $OPERATION in

create) //第一种情况:create

read -p “Please input the userfile : ” USERFILE //提示输入文件

[ -e $USERFILE ] || { //判断是否存在

echo “$USERFILE is not exist “

exit 1

}

read -p “Please input the passwdfile : ” PASSFILE

[ -e $PASSFILE ] || {

echo “$PASSFILE is not exist “

exit 1

}

USERLINE=`awk ‘BEGIN{N=0}{N++}END{print N}’ $USERFILE` //计算userfile文件行数

for LINE_NUM in `seq 1 $USERLINE` //利用循环建立

do

USERNAME=`sed -n “${LINE_NUM}p” $USERFILE` //截取userfile文件第一行内容

PASSWORD=`sed -n “${LINE_NUM}p” $PASSFILE` //截取passfile文件第一行内容

useradd $USERNAME //建立用户

echo $PASSWORD | passwd –stdin $USERNAME

done

;;

delete) //第二种情况:delete

read -p “Please input the userfile : ” USERFILE

[ -e $USERFILE ] || {

echo “$USERFILE is not exist “

exit 1

}

USERLINE=`awk ‘BEGIN{N=0}{N++}END{print N}’ $USERFILE`

for LINE_NUM in `seq 1 $USERLINE`

do

USERNAME=`sed -n “${LINE_NUM}p” $USERFILE`

userdel -r $USERNAME

done

;;

*) //第三种情况:其余各种情况

echo Eorror!

;;

esac


2.执行:

[root@localhost mnt]# cat userfile

user1

user2

user3

[root@localhost mnt]# cat passfile

123

456

789

[root@localhost mnt]# sh user_ctrl.sh user

Please input the operation (create or delete ): hello //输入错误动作

Eorror!

[root@localhost mnt]# sh user_ctrl.sh user

Please input the operation (create or delete ): create

Please input the userfile : user //输入错误文件

user is not exist

[root@localhost mnt]# sh user_ctrl.sh user

Please input the operation (create or delete ): create

Please input the userfile : userfile

Please input the passwdfile : passfile //建立用户

Changing password for user user1.

passwd: all authentication tokens updated successfully.

Changing password for user user2.

passwd: all authentication tokens updated successfully.

Changing password for user user3.

passwd: all authentication tokens updated successfully.

[root@localhost mnt]# sh user_ctrl.sh user

Please input the operation (create or delete ): delete //删除用户

Please input the userfile : userfile

[root@localhost mnt]# id user1

id: user1: no such user



实验二

循环

循环执行介绍

将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件

重复运行次数

循环次数事先已知循环次数事先未知

常见的循环的命令:for, while, until


for循环

[root@centos7 ~]#help for

for: for NAME [in WORDS … ] ; do COMMANDS; done

Execute commands for each member in a list.

The `for’ loop executes a sequence of commands for each member in a

list of items. If `in WORDS …;’ is not present, then `in “$@”‘ is

assumed. For each element in WORDS, NAME is set to that element, and

the COMMANDS are executed.

Exit Status:

Returns the status of the last command executed.

for ((: for (( exp1; exp2; exp3 )); do COMMANDS; done

Arithmetic for loop.

Equivalent to

(( EXP1 ))

while (( EXP2 )); do

COMMANDS

(( EXP3 ))

done

EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is

omitted, it behaves as if it evaluates to 1.

Exit Status:

Returns the status of the last command executed.

格式1:

for NAME [in WORDS … ] ; do COMMANDS; done for 变量名 in 列表;do 循环体 done for 变量名 in 列表 do 循环体 done

执行机制:依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束

for循环列表生成方式:

直接给出列表

整数列表:

{start..end}

$(seq [start [step]] end)

返回列表的命令:

$(COMMAND)

使用glob,如:*.sh

变量引用,如:$@每个参数为独立字符串,$#传递给脚本的参数的个数,$*全部参数合为一个字符串

范例:面试题,计算1+2+3+…+100的结果

[root@centos8 ~]#sum=0;for i in {1..100};do let sum+=i;done ;echo sum=$sum

sum=5050

[root@centos8 ~]#seq -s+ 100|bc5050

5050

1

2

3

4

范例:

[root@centos8 ~]#cat /data/scripts/for_sum.sh

#!/bin/bash

sum=0

for i in $* ; do

let sum+=i

done

echo sum=$sum

[root@centos8 ~]#bash /data/scripts/for_sum.sh 1 2 3 4 5 6

sum=21

  • 性价比移动机械硬盘推荐 艾比格特无线移动硬盘促
  • 2024-11-08性价比移动机械硬盘推荐 艾比格特无线移动硬盘促手机内存不够了怎么办?花钱买一个新的手机?直接清空手机内存?还是一边清理内存,一边战战兢兢的存?编辑给各位带来一个可以瞬间提升手机内存的神器,移动设备的最佳伴侣艾比格特无线移动硬盘XSAUWH1000。
  • 民兵是什么意思(民兵的意思)
  • 2024-11-08民兵的意思民兵是国家的一项军事制度民兵是国家在长期革命战争中逐步发展起来的不脱离生产的群众武装组织是中国人民解放军的助手和后备力量在历次革命战争中都发挥了重要作用,在中国人民解放事业作出了重大贡献中华人民共和国。
  • 盖碗到底是用来泡茶还是喝茶的(盖碗如何泡茶更好喝)
  • 2024-11-08盖碗如何泡茶更好喝你有没有发现一个问题:明明投茶量、水温、冲泡时间都掌握得很好,泡出来的茶汤感觉还是差点意思?很可能是因为你忽视了出汤后是否揭盖的问题,大家对这个问题往往通常持两种态度一种态度是觉得应该揭盖因为揭盖能使。
  • 杨浦最好的公办中学(杨浦老牌优质名校)
  • 2024-11-08杨浦老牌优质名校今天,我们为大家介绍的是杨浦著名的齐一小学,帮大家整理了这个小学的办学特色、招生要求、升学去向、统筹去向、对口地段等情况此外,我们也梳理了比较有代表性的对口小区的概况,如圣骊河滨苑,滨江晶典,瀚杨苑,。
  • 怎么烙饼才能不干不硬(想要烙饼柔软不硬)
  • 2024-11-08想要烙饼柔软不硬面粉可以做出很多面食,比如我们常吃的包子、面条、馒头等,都是用面粉来制作的,而除了这些美食,面粉还可以烙饼烙饼制作起来更加省事,不需要发面,还可以加上自己喜欢吃的配菜,吃起来松软可口,层次分明,并且饱。
  • 宏碁2023新品上市:选择负重前行的宏碁拿出了最铿锵的环保永续计划
  • 2024-11-08宏碁2023新品上市:选择负重前行的宏碁拿出了最铿锵的环保永续计划在近期宏碁召开的新品发布会上,把“PC”和“环保”放到了同一个语境,这多少让我有些意外,因为这种不功利的慢热动作其实并不讨好IT品牌要做到环保到底有多难?科技企业做环保,改善一个环节是远远不够的,整个。
  • 新宝马x3仅售27万车身尺寸(全新宝马X3-7月3日开卖)
  • 2024-11-08全新宝马X3-7月3日开卖2018年,宝马X3首次实现国产,并于4月25日举办的北京车展公布售价:39.98万-58.58万元网上车市从华晨宝马官方获悉,全新宝马X3将于7月3日正式上市与上一代车型相比,全新宝马X3在尺寸、动。
  • 不用的旧棉衣如何改造(旧被子和旧棉衣不要扔)
  • 2024-11-08旧被子和旧棉衣不要扔你家里是不是也有很多用了多年的棉花被,扔了可惜,留着又太旧,尤其是上边沾满了小孩尿渍的,更是留置无用,扔了心疼;还有些旧棉服棉衣,做的时候,都崭新的棉花和羽绒,现在衣服就了,就这么扔了,总觉得不太合适。
  • 雄健的近义词(词语雄健的近义词)
  • 2024-11-08词语雄健的近义词雄壮xióngzhuàng,意思是雄伟勇武《三国志·吴志·陆绩传》:“绩容貌雄壮,博学多识”雄浑xiónghún,雄健浑厚《新唐书·文艺传序》:“崇雅黜浮,气益雄浑,则燕许擅其宗”。
  • 微信十年勋章怎么领取(微信十年勋章的领取方法)
  • 2024-11-08微信十年勋章的领取方法打开微信,点击界面右上角的搜索图标搜索“微信十年时空隧道”,点击小程序“微信十年时空隧道”点击小程序“制作时空卡片”分别添加过去的照片和现在的照片,点击“生成时空卡片”点击“保存回忆”这样我们就获得了。