linux编写shell脚本程序(linux脚本编写教程)
linux编写shell脚本程序(linux脚本编写教程)
2024-09-29 05:34:34  作者:累累累累  网址: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-09-29心悦诚服的意思和造句一、心悦诚服意思是诚心诚意地服从或佩服例句:1.当老师的教导学生,要情理并重,让他们心悦诚服2.他为人十分豪爽,快人快语,替他做事的人,对他都心悦诚服。
  • 酸奶早晨喝好还是晚上吃好(什么时间段喝最好)
  • 2024-09-29什么时间段喝最好简明的话语讲靠谱的医疗,大家好,这里是“济是本”酸奶是目前日常生活中非常普及的奶制品,特别是很多儿童及青少年,是每天摄入的标配,那什么时间段喝酸奶比较好呢?1、酸奶中含有着大量的益生菌,益生菌是有助于。
  • 巴基斯坦谈中印班公湖对峙(印度再次越界挑衅)
  • 2024-09-29印度再次越界挑衅从6月15日,中印在加勒万河谷边境爆发肢体冲突以来,为了给边境紧张局势降温,中印双方已经进行了五轮军长级会谈,在这些会谈中,印度几乎没有拿出任何的诚意,在第二次会谈中,甚至提出了7点无理要求1、从班公。
  • 网上货源一件代发怎么操作(一件代发货源网站有哪些)
  • 2024-09-29一件代发货源网站有哪些随着电子商务的快速发展,国内越来越多的卖家对于产品货源的需求呈现多品类,多层次的特点而且市场范围也不仅仅局限于国内,很多卖家也将产品卖往全球那么国内一件代发货源网站都有哪些呢?今天小编给大家盘点最实用。
  • 新锅开锅的最佳方法(新锅开锅技巧)
  • 2024-09-29新锅开锅技巧用清水冲洗锅,并用海绵轻轻刷洗用干净的布,擦干表面后,倒入适量的油,覆盖锅底加热到起烟后把油倒掉,并用温水冲洗纸巾或者软布擦拭表面,把锅中的油擦干净日后,正常使用并清洁完毕后,要立即擦干,并涂上一层油。
  • 魔兽争霸3 经久不衰(及时战略战场由你掌控)
  • 2024-09-29及时战略战场由你掌控游戏简介《魔兽争霸3:冰封王座》是一款成功的即时战略游戏游戏包含了大多数即时战略游戏所具备的要素:采集资源,建设基地和指挥战斗游戏的操作方式也与星际争霸类似,秉承了星际争霸易于上手的优点,并对星际争霸。
  • 国内16升主流燃气热水器(无数消费者首选)
  • 2024-09-29无数消费者首选热水器无疑是家居日常使用最频繁的家用电器之一,其品质优劣直接决定了全家洗浴的舒适程度忽冷忽热、低压、冷水段等都是阻碍家居供热的因素,也是热水器产品常见的问题如何打造一款解决多数热水使用毛病的热水器,让。
  • 李白桃源诗(李白诗中的青溪)
  • 2024-09-29李白诗中的青溪尹定根《宣城历史文化研究》第804期唐代诗仙李白(701—762),晚年游览皖南的“青溪”“清溪”二地,触景生情赋诗多首历来众多的书册、文章、网站中,几乎仍沿袭前人成说,给予二地注释,指认不明,概念模。
  • 怎么看颈椎病的严重程度(颈椎病分十个级别)
  • 2024-09-29颈椎病分十个级别总是头晕、头痛、手麻?你有没有想过是颈椎出了问题?冬天是颈椎病高发期犯颈椎病后,怎么做才科学?颈椎病的10个级别一级:脖子酸痛、僵硬(建议抬头看看天花板,脖子后面是否有感觉)二级:脖子、肩膀、后背酸痛。
  • 包头国家最有名景区(包头这些A级景区)
  • 2024-09-29包头这些A级景区前几天,有一位小伙伴问起:“包头有什么好玩的?”小编眉头一皱,觉察此事并不简单:因为,包头好玩的地方实在太多啦!小编思来想去,决定整理一份详细的清单给大家~快看看哪些景点还没去过~山水篇吉穆斯泰吉木斯。