Thizlinux 系统教程 Shell 经典实例

合集下载

Shell 经典实例

Shell 经典实例

Thizlinux 系统教程 Shell 经典实例----------------Milo经典小shell1 列目录树的shell脚本如下:#!/bin/sh# dtree: Usage: dtree [any directory]dir=${1:-.}(cd $dir; pwd)find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g"2 while中使用read (file是一个文件)cat file | while read linedoecho $lineecho " :: Please input any key(s):c"str4read=""while truedochr4read=`dd if=/dev/tty bs=1 count=1 2>/dev/null`str4read=$str4read$chr4readif [ "$chr4read" = "" ] ;then break; fidoneecho " :: |$str4read|"done3 将多个空格替换为字符sed 's/[ ][ ]*/ /g'如果空格与tab共存时用sed -e 's/[[:space:]][[:space:]]*/ /g' filename4用脚本实现分割文件#!/bin/bashif [ $# -ne 2 ]; thenecho 'Usage: split file size(in bytes)'exitfifile=$1size=$2if [ ! -f $file ]; thenecho "$file doesn't exist"exitfi#TODO: test if $size is a valid integerfilesize=`/bin/ls -l $file | awk '{print $5}'` echo filesize: $filesizelet pieces=$filesize/$sizelet remain=$filesize-$pieces*$sizeif [ $remain -gt 0 ]; thenlet pieces=$pieces+1fiecho pieces: $piecesi=0while [ $i -lt $pieces ];doecho split: $file.$i:dd if=$file of=$file.$i bs=$size count=1 skip=$i let i=$i+1doneecho "#!/bin/bash" > mergeecho "i=0" >> mergeecho "while [ $i -lt $pieces ];" >> mergeecho "do" >> mergeecho " echo merge: $file.$i" >> mergeecho " if [ ! -f $file.$i ]; then" >> mergeecho " echo merge: $file.$i missed" >> mergeecho " rm -f $file.merged" >> mergeecho " exit" >> mergeecho " fi" >> mergeecho " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >> merge echo " let i=$i+1" >> mergeecho "done" >> mergechmod u+x merge'5得到上月未日期,格式为YYYYMMDDget_lastday_of_lastmonth(){yy=`date +%Y`mm=`date +%m-1|bc`[ $mm -lt 1 ] && mm=12;yy=`expr $yy - 1`aaa=`cal $mm $yy`dd=`echo $aaa|awk '{print $NF}'`echo $yy$mm$dd}print $NF的$NF是打印最后一个列。

经典shell 脚本实例

经典shell 脚本实例

fi
done
#!/bin/bash
if [ $# -le 0 ]
then
echo "Not enough parameters"
exit 1
fi
#string="2 3 4 5 6"
#set string
sum=0
while [ $# -gt 0 ]
do
sum=`expr $sum + $1`
shift
印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。#!/bin/sh
unset var
while [ "$var" != "end" ]
do
echo -n "please input a number: "
ቤተ መጻሕፍቲ ባይዱ
read var
if [ "$var" = "end" ]
then
break
fi
Linux shell 脚本实例
1. 写一个脚本,利用循环计算 10 的阶乘#!/bin/sh
factorial=1
for a in `seq 1 10`
do
factorial=`expr $factorial \* $a`
done
echo "10! = $factorial"
2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打
esac done #! /bin/sh a=10 b=20 c=30 value1=`expr $a + $b + $c` echo "The value of value1 is $value1" value2=`expr $c / $b` echo "The value of value2 is $value2" value3=`expr $c * $b` echo "The value of value3 is $value3" value4=`expr $a + $c / $b` echo "The value of value4 is $value4" var4=`expr $value4 - $value2` echo $var4

linux操作系统之shell编程实例

linux操作系统之shell编程实例

当然,我可以为您提供一些Linux操作系统下的Shell编程实例。

Shell编程是一种使用命令行界面来执行任务和自动化工作的方式。

下面是一些常见的Shell编程示例:1.目录备份脚本:2.bash复制代码#!/bin/bash# 源目录和目标备份目录source_dir="/path/to/source"backup_dir="/path/to/backup"# 备份文件名backup_file="backup_$(date +%Y%m%d_%H%M%S).tar.gz"# 创建目标备份目录(如果不存在)mkdir -p "$backup_dir"# 执行备份命令tar -czvf "$backup_dir/$backup_file""$source_dir"这个脚本将指定的源目录备份为一个压缩的tar文件,并将其保存到指定的备份目录中。

您可以将/path/to/source替换为要备份的实际目录,将/path/to/backup替换为保存备份文件的目标目录。

1.文件计数脚本:2.bash复制代码#!/bin/bash# 目标目录target_dir="/path/to/target"# 计数文件数和目录数file_count=$(find "$target_dir" -type f | wc -l)dir_count=$(find "$target_dir" -type d | wc -l)# 打印结果echo"文件数: $file_count"echo"目录数: $dir_count"这个脚本将计算指定目录中的文件数和目录数,并将结果打印出来。

您可以将/path/to/target替换为要计算的实际目录。

shell编程经典例题大全

shell编程经典例题大全

shell编程经典例题大全
Shell编程是一种在Unix或类Unix操作系统上进行脚本编程
的方法。

它可以通过命令行界面执行各种操作,包括文件操作、系
统管理和自动化任务等。

下面我将列举一些经典的Shell编程例题,以供参考:
1. 编写一个脚本,统计指定目录下所有文件的行数。

2. 创建一个脚本,实现自动备份指定目录的文件到另一个目录。

3. 编写一个脚本,监控系统内存使用情况,并在内存占用超过
一定阈值时发送警报。

4. 创建一个脚本,批量修改指定目录下的文件扩展名。

5. 编写一个脚本,实现定时清理指定目录下的过期文件。

6. 创建一个脚本,监控指定服务的运行状态,并在异常情况下
自动重启服务。

7. 编写一个脚本,实现日志文件的定时切割和压缩。

8. 创建一个脚本,批量修改指定目录下文件的权限和所有者。

9. 编写一个脚本,实现定时执行系统维护任务,如磁盘清理、日志轮转等。

10. 创建一个脚本,实现对指定目录下文件的关键词搜索并生成报告。

以上是一些常见的Shell编程例题,涵盖了文件操作、系统管理、定时任务等多个方面。

通过解决这些例题,可以帮助提高对Shell脚本编程的理解和实践能力。

希望这些例题对你有所帮助。

shell指令常见的使用案例

shell指令常见的使用案例

Shell指令常见的使用案例1. 简介Shell是一种命令行解释器,主要用于在操作系统上执行用户命令。

通过Shell指令,我们可以控制计算机进行各种操作。

本文将详细介绍Shell指令的常见使用案例,包括文件操作、系统管理、进程控制、管道和重定向、文本处理等方面。

2. 文件操作文件操作是Shell指令最常见的使用场景之一。

下面是一些常用的文件操作指令案例:2.1 创建目录使用mkdir指令可以创建一个新的目录。

例如,要在当前目录下创建一个名为“test”的目录,可以执行以下指令:mkdir test2.2 切换目录使用cd指令可以切换当前工作目录。

例如,要进入“test”目录,可以执行以下指令:cd test2.3 列出文件使用ls指令可以列出当前目录下的文件和子目录。

例如,要列出当前目录下的所有文件和子目录,可以执行以下指令:ls2.4 复制文件使用cp指令可以复制文件。

例如,要将一个名为“file1”的文件复制到“test”目录下,可以执行以下指令:cp file1 test/2.5 删除文件使用rm指令可以删除文件。

例如,要删除一个名为“file1”的文件,可以执行以下指令:rm file13. 系统管理Shell指令还可以用于系统管理任务,如用户管理、权限管理等。

下面是一些常用的系统管理指令案例:3.1 添加用户使用useradd指令可以添加一个新用户。

例如,要添加一个名为“user1”的用户,可以执行以下指令:useradd user13.2 删除用户使用userdel指令可以删除一个用户。

例如,要删除一个名为“user1”的用户,可以执行以下指令:userdel user13.3 修改文件权限使用chmod指令可以修改文件的权限。

例如,要将一个名为“file1”的文件设置为所有者可读、写和执行,其他用户只有读权限,可以执行以下指令:chmod u=rwx,g=r,o=r file13.4 查看系统信息使用uname指令可以查看系统的一些基本信息。

shell指令及其常见使用实例 -回复

shell指令及其常见使用实例 -回复

shell指令及其常见使用实例-回复标题:深入理解与实践Shell指令及其常见使用实例Shell是Linux和Unix系统中的命令行解释器,它允许用户通过输入各种指令来与操作系统进行交互。

这些指令可以帮助我们执行各种任务,从文件管理到系统监控,甚至是编程。

以下是一些常见的Shell指令及其使用实例。

1. `ls`:列出目录内容这是最基本的命令之一,用于显示当前目录下的文件和子目录列表。

使用实例:ls这将列出当前目录下的所有文件和子目录。

2. `cd`:改变目录这个命令用于切换到指定的目录。

使用实例:cd /home/user/documents这将切换到/home/user/documents目录。

3. `mkdir`:创建新目录这个命令用于在当前目录下创建一个新的目录。

使用实例:mkdir new_directory这将在当前目录下创建一个名为new_directory的新目录。

4. `rm`:删除文件或目录这个命令用于删除指定的文件或目录。

使用实例:rm file.txt这将删除名为file.txt的文件。

5. `cp`:复制文件或目录这个命令用于复制文件或目录。

使用实例:cp file.txt /home/user/documents/这将复制file.txt文件到/home/user/documents/目录。

6. `mv`:移动或重命名文件或目录这个命令用于移动或重命名文件或目录。

使用实例:mv file.txt new_file.txt这将把file.txt重命名为new_file.txt。

7. `echo`:输出字符串或变量值这个命令用于在屏幕上显示指定的文本或变量值。

使用实例:echo "Hello, World!"这将在屏幕上显示"Hello, World!"。

8. `cat`:查看文件内容这个命令用于查看文件的内容。

使用实例:cat file.txt这将显示file.txt文件的内容。

shell指令及其常见使用实例

shell指令及其常见使用实例

shell指令及其常见使用实例Shell指令是一种在操作系统的命令行界面下使用的命令,它用于执行各种任务,如文件操作、进程管理、网络通信等。

下面是一些常见的Shell指令及其使用实例:1. ls,用于列出当前目录下的文件和文件夹。

示例,ls.2. cd,用于切换当前工作目录。

示例,cd /path/to/directory.3. pwd,用于显示当前工作目录的路径。

示例,pwd.4. mkdir,用于创建新的目录。

示例,mkdir new_directory.5. rm,用于删除文件或目录。

示例,rm file.txt 或 rm -r directory/。

6. cp,用于复制文件或目录。

示例,cp file.txt new_file.txt 或 cp -r directory/ new_directory/。

7. mv,用于移动文件或目录,也可用于文件/目录重命名。

示例,mv file.txt new_directory/ 或 mv file.txt new_name.txt.8. cat,用于查看文件的内容。

示例,cat file.txt.9. grep,用于在文件中搜索指定的模式。

示例,grep "pattern" file.txt.10. echo,用于在终端输出文本。

示例,echo "Hello, World!"11. chmod,用于修改文件或目录的权限。

示例,chmod 755 file.txt.12. ps,用于显示当前运行的进程。

示例,ps aux.13. kill,用于终止指定进程。

示例,kill PID.14. ssh,用于远程登录到其他计算机。

示例,ssh username@hostname.15. ping,用于测试网络连接。

示例,ping .这些只是Shell指令的一小部分,常见的使用实例也只是其中的一些示例。

Shell指令非常丰富和灵活,可以根据具体需求进行组合和扩展,以实现更复杂的操作。

shell编程题经典100例

shell编程题经典100例

shell编程题经典100例 1. 显示当前路径```shellpwd```2. 列出当前目录中的文件和目录```shellls```3. 创建一个新的目录```shellmkdir <目录名> ```4. 删除一个目录 ```shellrmdir <目录名> ```5. 删除一个文件 ```shellrm <文件名>```6. 复制一个文件```shellcp <源文件> <目标文件> ```7. 移动一个文件```shellmv <源文件> <目标文件> ```8. 重命名一个文件```shellmv <旧文件名> <新文件名> ```9. 创建一个符号链接```shellln -s <源文件> <符号链接> ```10. 显示一个文件的详细信息 ```shellls -l <文件名>```11. 显示一个目录的详细信息 ```shellls -ld <目录名>```12. 查找一个文件```shellfind <路径> -name <文件名> ```13. 搜索文本字符串```shellgrep <字符串> <文件>```14. 显示一个文件的指定行```shellhead -n <行数> <文件>```15. 显示一个文件的最后几行 ```shelltail -n <行数> <文件>```16. 比较两个文件```shelldiff <文件1> <文件2>```17. 合并两个文件```shellcat <文件1> <文件2> > <输出文件> ```18. 运行一个命令```shellcommand <参数>```19. 管道命令```shellcommand1 | command2```20. 重定向输出```shellcommand > <输出文件> ```21. 重定向输入```shellcommand < <输入文件> ```22. 使用环境变量```shellecho $PATH```23. 设置环境变量```shellPATH=/usr/bin:/bin export PATH```24. 创建一个脚本```shell#!/bin/bash# 脚本内容```25. 运行一个脚本 ```shell./<脚本名>```26. 调试一个脚本 ```shellbash -x <脚本名> ```27. 使用case语句 ```shellcase $1 in"start")# 执行启动命令;;"stop")# 执行停止命令;;esac```28. 使用if语句```shellif [ $1 -gt 10 ]; then# 执行条件为真的命令 else# 执行条件为假的命令 fi```29. 使用for循环```shellfor i in 1 2 3 4 5; do # 迭代执行命令done```30. 使用while循环```shellwhile [ $i -lt 10 ]; do # 循环执行命令i=$((i+1))done```31. 使用until循环```shelluntil [ $i -gt 10 ]; do # 循环执行命令i=$((i+1))done```32. 使用函数```shellfunction my_function() { # 函数体}my_function```33. 使用数组```shellarr=(1 2 3 4 5)echo ${arr[2]}```34. 使用字典```shelldeclare -A dictdict["name"]="John Doe" echo ${dict["name"]}```35. 使用正则表达式```shellif [[ $string =~ ^[[:alpha:]]+$ ]]; then # 匹配以字母开头的字符串fi```36. 使用管道符```shellls | grep "txt"```37. 使用换行符```shellecho -e "Line 1\nLine 2"```38. 使用引号```shellecho "This is a string with spaces"```39. 使用转义字符```shellecho "This is a string with a \n newline" ```40. 使用注释```shell# 这是一行注释```41. 使用条件?:```shellresult=$(if [ $condition ]; then echo "true"; else echo "false"; fi)```42. 使用切片```shellecho "${string:0:3}"```43. 使用join命令```shellecho $( IFS=","; echo "${array[]}" ) ```44. 使用read命令```shellread -p "Enter your name: " name```45. 使用变量赋值```shellvar=$(expr 1 + 2)```46. 使用算术运算```shell(( i++ ))```47. 使用逻辑运算符```shellif [[ $condition1 && $condition2 ]]; then # 条件 1 和条件 2 都为真fi48. 使用比较运算符```shellif [[ $var -gt 10 ]]; then # var 大于 10fi```49. 使用测试命令```shellif test -f <文件>; then# 文件存在```50. 使用getopts解析命令行参数 ```shellwhile getopts ":ab:" opt; do case $opt ina)flag_a=true;;b)arg_b=$OPTARG;; esac done```。

linuxshell编程案例

linuxshell编程案例

linuxshell编程案例Linux Shell编程案例Shell编程是一种在Linux操作系统中使用Shell脚本语言编写脚本的技术。

通过Shell编程,我们可以自动化执行一系列的命令,提高工作效率。

下面,我将介绍一个实际的Shell编程案例,帮助大家更好地理解和应用Shell编程。

案例背景:假设我们是一家电商公司的运维工程师,每天需要备份公司的数据库,并将备份文件上传到远程服务器上。

为了简化这个繁琐的过程,我们可以使用Shell编程来实现自动备份和上传。

案例步骤:1. 创建Shell脚本文件首先,我们需要创建一个Shell脚本文件,比如命名为backup.sh。

可以使用任何文本编辑器来创建该文件。

2. 编写脚本内容在backup.sh文件中,我们需要编写一系列的命令来实现备份和上传的功能。

下面是一个简单的示例:```shell#!/bin/bash# 定义备份文件名和路径backup_file="db_backup_$(date +%Y%m%d).sql"backup_path="/path/to/backup"# 备份数据库mysqldump -u username -p password database >$backup_path/$backup_file# 上传备份文件到远程服务器scp $backup_path/$backup_file user@remote_server:/path/to/backup```在这个示例中,我们首先定义了备份文件的名称和路径。

然后,使用`mysqldump`命令备份数据库,并将备份文件保存到指定的路径中。

最后,使用`scp`命令将备份文件上传到远程服务器上。

3. 添加执行权限在终端中,使用`chmod +x backup.sh`命令为脚本文件添加执行权限。

4. 执行脚本在终端中,使用`./backup.sh`命令执行脚本。

shell编程实例

shell编程实例

shell编程实例Shell编程是一种在Unix或类Unix操作系统中使用的脚本编程语言,它可以通过命令行解释器来执行。

Shell编程可以帮助我们自动化一些重复性的任务,提高工作效率。

下面我将介绍一个实际的Shell编程实例,希望能够对大家有所帮助。

假设我们有一个存储着学生信息的文本文件,每行记录包含学生的姓名、年龄和成绩,以空格分隔。

我们的任务是根据学生的成绩,将他们分为优秀、良好、及格和不及格四个等级,并将结果输出到一个新的文件中。

首先,我们需要创建一个名为"students.txt"的文本文件,并在其中添加一些学生信息,如下所示:```Tom 18 90Jerry 19 85Alice 20 75Bob 18 60```接下来,我们可以使用Shell编程来实现我们的任务。

首先,我们需要编写一个Shell脚本文件,比如命名为"grade.sh"。

然后,我们可以使用文本编辑器打开该文件,并输入以下内容:```shell#!/bin/bashwhile read linedoname=$(echo $line | cut -d ' ' -f 1)age=$(echo $line | cut -d ' ' -f 2)score=$(echo $line | cut -d ' ' -f 3)if [ $score -ge 90 ]; thengrade="优秀"elif [ $score -ge 80 ]; thengrade="良好"elif [ $score -ge 60 ]; thengrade="及格"elsegrade="不及格"fiecho "$name $age $score $grade" >> result.txt done < students.txt```在上述脚本中,我们首先使用"while read line"来逐行读取"students.txt"文件中的内容。

18个LinuxShell脚本经典案例课件PPT模板

18个LinuxShell脚本经典案例课件PPT模板

05
1-11案例10:一键部署LNMP网站平台案例10: 一键部署LNMP网站平台
06
1-12案例11:监控MySQL主从状态是否异常案 例11:监控MySQL主从状态是否异常
第1章18个生产环境linuxshell脚 本案例
01
1-13案例12:MySQL数据库备份(分库分表) 案例12:MySQL数据库备份(分库分表)
06
1-18案例17:DOS攻击防范案例17:DOS攻击 防范
第1章18个生产环境 linuxshell脚本案例
1-19案例18:目录文件变化监 控与实时文件同步案例18:目录 文件变化监控与实时文件同步
1-20小结小结
感谢聆听
02
1-14案例13:Nginx访问日志分析案例13: Nginx访问日志分析
03
1-15案例14:Nginx访问日志自动按天切割案 例14:Nginx访问日志自动按天切割
04
1-16案例15:自动发布Java项目(Tomcat)案 例15:自动发布Java项目(Tomcat)
05
1-17案例16:自动发布PHP项目案例16:自动 发布PHP项目
03
1-3案例2:Linux系统发送告警邮件案例2: Linux系统发送告警邮件
04
1-4案例3:批量创建100个用户并设置随机密码 案例3:批量创建100个用户并设置随机密码
05
1-5案例4:一键查看服务器资源利用率案例4: 一键查看服务器资源利用率
06
1-6案例5:找出占用CPU、内存过高的进程案 例5:找出占用CPU、内存过高的进程
18个linuxshell脚本 经典案例
演讲人
2 0 2 x - 11 - 11

linux shell 案例

linux shell 案例

linux shell 案例
以下是两个关于Linux Shell的案例:
案例一:获取网卡IP地址
问题描述:输入一个网卡名称,输出对应的IP地址。

如果输入的网卡名称不存在,则给出相应的提示。

解决方案:
1.使用if语句判断输入的网卡名称是否正确。

2.使用grep和awk命令获取所有网卡名,并将它们保存到一个文件中。

3.使用sed命令将变量替换到文件中,并生成一个新的文件。

4.比较两个文件的行数,如果不相等,说明网卡名称不存在。

5.最后使用awk命令匹配网卡名并输出对应的IP地址。

案例二:复制目录
问题描述:将/root/下的所有一级目录复制到/tmp目录下。

要求使用循环和函数实现复制操作。

解决方案:
1.定义一个copy函数,该函数接收一个目录路径作为参数,并在函数内部使用
cp命令进行复制操作。

2.在for循环中调用copy函数,将/root/下的所有一级目录作为参数传递给函
数。

3.循环结束后,所有的一级目录都将被复制到/tmp目录下。

以上两个案例分别展示了Linux Shell在获取网卡IP地址和复制目录方面的应用。

通过这些案例,我们可以更好地理解Linux Shell的语法和常用命令,以及如何在实际问题中应用这些知识和技能。

linuxshell编程具体案例

linuxshell编程具体案例

linuxshell编程具体案例一、统计文件中某个字符出现的次数在Linux Shell编程中,我们可以使用grep命令结合wc命令来统计文件中某个字符出现的次数。

具体操作如下:1. 创建一个文本文件,例如test.txt,内容为一段文字。

2. 在终端中输入以下命令:```grep -o 'a' test.txt | wc -l```其中,`grep -o 'a' test.txt`表示在test.txt文件中查找所有的字符'a',并输出到标准输出;`wc -l`表示统计标准输入中的行数。

通过以上命令,就可以统计出test.txt文件中字符'a'出现的次数。

二、计算两个数的和在Linux Shell编程中,我们可以使用expr命令来进行数值计算。

具体操作如下:1. 在终端中输入以下命令:```expr 10 + 20```其中,`expr`表示执行表达式计算;`10 + 20`表示要计算的表达式,即求10和20的和。

通过以上命令,就可以计算出10和20的和。

三、查找文件中包含特定字符串的行在Linux Shell编程中,我们可以使用grep命令来查找文件中包含特定字符串的行。

具体操作如下:1. 创建一个文本文件,例如test.txt,内容为多行文字,其中包含特定字符串。

2. 在终端中输入以下命令:```grep '特定字符串' test.txt```其中,`grep`表示在test.txt文件中查找包含特定字符串的行;`'特定字符串'`表示要查找的特定字符串。

通过以上命令,就可以找到test.txt文件中包含特定字符串的行。

四、判断文件是否存在在Linux Shell编程中,我们可以使用test命令来判断文件是否存在。

具体操作如下:1. 在终端中输入以下命令:```test -e 文件路径```其中,`test`表示进行测试;`-e`表示判断文件是否存在;`文件路径`表示要判断的文件路径。

linux shell string用法

linux shell string用法

linux shell string用法
- `${varname:-word}`:如果`varname`存在并且不为`null`,返回`varname`的值,否则返回`word`。

用于当某个变量不存在或没定义时返回一个缺省的值。

- `${varname:=word}`:如果`varname`存在并且不为`null`,返回`varname`的值,否则向其赋值为`word`,并返回该值。

用于对某个不存在或没定义变量设置缺省。

- `${varname:?message}`:如果`varname`存在并且不为`null`,返回`varname`的值,否则打印信息`varname:message`,并`abort`脚本,如果没有设置`message`,将使用缺省的“parameter null or not set”。

用于检查变量没有定义的错误。

- `${varname:+word}`:如果`varname`存在并且不为`null`,返回`word`的值,否则返回`null`。

用于检测变量是否存在。

你具体想了解哪一种字符串用法呢?欢迎向我提问。

Linux下shell编程实例

Linux下shell编程实例

Linux下shell编程实例1. 推断⼀⽂件是不是块或字符设备⽂件。

假设是将其复制到 /dev ⽂件夹下read -p "input a file:" filenameif [ -b $filename -o -c $filename ]thencp $filename /dev/fi2.编写⼀个脚本。

进⾏简单的减法运算。

要求提⽰输⼊变量#!/bin/bashread -p "input a number:" num1read -p "input another number:" num2let "num3=num1-num2"echo $num33.把某个⽂件夹下的⽂件扩展名改为bat,再以时间为⽂件名称压缩打包存放到某个⽂件夹。

#!/bin/bashfor file in $(ls $1)donew_file=${file%.*}.batmv ./$1/$file ./$1/$new_filetmp=$(date +%y)tar cvf ./$tmp.tar ./$1done4.推断⼀个数是不是完数。

打印出1-1000之间的完数。

完数就是约数的和等于⾃⾝2倍的数。

(6,28,496)#!/bin/bashsub(){i=1;sum=0;while [ $i -le $num ]dolet "m=num%i"if [ $m -eq 0 ]thenlet "sum=sum+i"filet "i=i+1"donelet "a=2*num"if [ $a -eq $sum ]thenecho $numfi}num=1while [ $num -le 1000 ]dosublet "num = num+1"done5.在某个⽬录下查找含有指定字符串的⽂件#!/bin/bashfor file in $(ls $2)dobname=$(grep -l $1 $2/$file)basename $bnamedone6.加⼊⼀个新组为class1,然后加⼊属于这个组的30个⽤户,username的形式为stdxx,当中xx从01到30。

【学习】LinuxShell脚本实例之一

【学习】LinuxShell脚本实例之一

【学习】LinuxShell脚本实例之⼀1.程序流程控制实例程序流程控制,实际上就是改变程序的执⾏顺序。

程序在执⾏过程中若流程被改变,就可能导致输出不同,因此利⽤这⼀特性就能够实现程序执⾏结果的控制。

程序流程控制可分为“选择”和“循环”这两类,在需要根据实际需求的不同实现不同的输出时,就可以改变程序的执⾏流程。

(1)for循环语句基于for语句的循环,基于继续执⾏循环或者结束循环的⽅式。

在for执⾏命令前,其会先检查所要执⾏的列表中所指定的值是否还有未使⽤的,若有未使⽤的就赋值并执⾏列表,直到列表中的值全部都使⽤过后才退出循环。

如下是⼀个简单的 for 控制语句的脚本程序,其使⽤“星期”作为变量名,并从列表中读取值,直到读取完成后退出。

我们执⾏⼀下说明:第03 ⾏,所定义的变量名为week,其值为Monday~ Sunday。

第05⾏,使⽤echo回显变量week的值。

(2)while循环语句while循环语句结构是⼀种执⾏⼀系列命令的语句结构,它所执⾏的命令由测试条件所决定,这些条件定义语句是否继续执⾏。

在 while 循环语句中执⾏命令,若条件为真,则将过程执⾏⼀遍并回到开始处,接着再次进⾏条件的判断,若条件仍然是真,则接着再执⾏⼀遍,直到条件为假时才退出循环。

如下是⼀个数值运算的while循环脚本,其实现的是数值相加运算。

执⾏⼀下看⼀下结果说明:第03和04⾏,声明x和sum都为整型变量并赋予初始值。

第05⾏,条件测试。

第06~09⾏,这是⼀个循环体,当执⾏遇到done后,跳到第06⾏处继续执⾏,直到条件不满⾜时退出循环。

第10⾏,输出总数值。

(3)until循环语句与for和while循环体⼀样,until循环也执⾏⼀系列的命令,直到条件满⾜后退出循环。

until循环在循环体的顶部继续判断条件,直到条件为真时结束循环,否则⼀直执⾏。

以下脚本使⽤until语句来实现⼀个简单的、不断循环的输出预设值,直到⼈为⼲预时结束循环(按Ctrl+C组合键退出)。

linux shell案例

linux shell案例

linux shell案例Linux Shell是一种用于与操作系统进行交互的命令行解释器,它可以让用户通过输入命令来操作系统,执行各种任务和管理系统资源。

下面列举了十个Linux Shell案例,涵盖了常见的操作和管理任务。

1. 查看系统信息可以使用`uname`命令来查看系统的信息,如`uname -a`可以显示系统的内核版本、操作系统类型等信息。

2. 创建目录可以使用`mkdir`命令来创建目录,如`mkdir test`可以创建一个名为test的目录。

3. 复制文件可以使用`cp`命令来复制文件,如`cp file1.txt file2.txt`可以将文件file1.txt复制为file2.txt。

4. 移动文件可以使用`mv`命令来移动文件,如`mv file.txt dir/`可以将文件file.txt移动到dir目录中。

5. 删除文件或目录可以使用`rm`命令来删除文件或目录,如`rm file.txt`可以删除文件file.txt,`rm -r dir/`可以删除目录dir及其内容。

6. 查看文件内容可以使用`cat`命令来查看文件的内容,如`cat file.txt`可以显示文件file.txt的内容。

7. 修改文件权限可以使用`chmod`命令来修改文件的权限,如`chmod 755 file.txt`可以将文件file.txt的权限设置为755。

8. 查找文件可以使用`find`命令来查找文件,如`find /home -name "*.txt"`可以在/home目录下查找所有扩展名为txt的文件。

9. 压缩解压文件可以使用`tar`命令来压缩和解压文件,如`tar -czvf archive.tar.gz dir/`可以将目录dir压缩为archive.tar.gz文件,`tar -xzvf archive.tar.gz`可以解压缩archive.tar.gz文件。

Linuxshell脚本入门教程+实例

Linuxshell脚本入门教程+实例

Linuxshell脚本⼊门教程+实例原⽂:/article/136为什么要进⾏shell编程在Linux系统中,虽然有各种各样的图形化接⼝⼯具,但是shell仍然是⼀个⾮常灵活的⼯具。

Shell不仅仅是命令的收集,⽽且是⼀门⾮常棒的编程语⾔。

您可以通过使⽤shell使⼤量的任务⾃动化,shell特别擅长系统管理任务,尤其适合那些易⽤性、可维护性和便携性⽐效率更重要的任务。

下⾯,让我们⼀起来看看shell是如何⼯作的:建⽴⼀个脚本Linux中有好多中不同的shell,但是通常我们使⽤bash (bourne again shell) 进⾏shell编程,因为bash是免费的并且很容易使⽤。

所以在本⽂中笔者所提供的脚本都是使⽤bash(但是在⼤多数情况下,这些脚本同样可以在bash的⼤姐,bourne shell中运⾏)。

如同其他语⾔⼀样,我们可以使⽤任意⼀种⽂字编辑器,⽐如nedit、kedit、emacs、vi等来编写我们的shell程序。

程序必须以下⾯的⾏开始(必须⽅在⽂件的第⼀⾏):#!/bin/sh符号 #! ⽤来告诉系统它后⾯的参数是⽤来执⾏该脚本的程序。

在这个例⼦中我们使⽤/bin/sh来执⾏程序。

当编辑好脚本时,如果要执⾏该脚本,还必须使其可执⾏。

要使脚本可执⾏:chmod +x filename然后,您可以通过输⼊: ./filename 来执⾏您的脚本。

注释在进⾏shell编程时,以#开头的句⼦表⽰注释,直到这⼀⾏的结束。

我们真诚地建议您在程序中使⽤注释。

如果您使⽤了注释,那么即使相当长的时间内没有使⽤该脚本,您也能在很短的时间内明⽩该脚本的作⽤及⼯作原理。

变量在其他编程语⾔中您必须使⽤变量。

在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进⾏声明。

要赋值给⼀个变量,您可以这样写:变量名=值这⾥注意:等号做赋值符号时,两边不能有空格。

取出变量值可以加⼀个美元符号($)在变量前⾯:#!/bin/sh#对变量赋值:a="hello world"# 现在打印变量a的内容:echo "A is:"echo $a在您的编辑器中输⼊以上内容,然后将其保存为⼀个⽂件first。

Linux运维常用shell脚本实例

Linux运维常用shell脚本实例

Linux运维常⽤shell脚本实例1、⽤shell脚本批量建⽴Linux⽤户实现要求:创建⽤户student1到student50,指定组为student组!⽽且每个⽤户需要设定⼀个不同的密码!脚本实现如下:#!/bin/bashfor i in `seq 1 50`douseradd -G student student$i ;echo student$i | passwd student$i --stdin;done【说明:Linux下 Passwd有参数 --stdin This option is used to indicate that passwd should read the new password from standard input, which can be a pipe. 所以linux下⾃动改变⽤户密码的办法就是: Echo 密码 |passwd –stdin ⽤户名】-------------------设置相同的密码------------------------#!/bin/bashpassword="123456"for USER in user1 user2 user3douseradd -m $USERecho -e "${password}\n${password}" | passwd $USERdone【说明:echo -n 不换⾏输出:$echo -n "123"$echo "456"最终输出 123456⽽不是123456echo -e 处理特殊字符:\n 换⾏且光标移⾄⾏⾸】ok,就这么⼀个简单的脚本,就可以再系统⾥批量⽣成账号了。

⽽且密码跟账号的名字⼀样。

这就是for do done语句⽤法。

2、编写shell脚本,将/usr/local/test⽬录下⼤于100k的⽂件转移到/tmp⽬录下:#!/bin/bashfor FILE in `ls /usr/local/test`doif [ -f $FILE ] ; thenif [ `ls -l $FILE | awk `{print $5}` -gt 100000 ] ; thenmv $FILE /tmp/fifidone================#!/bin/bashfor FileName in `ls -l /usr/local/test | awk '$5>102400' {print $9}`domv $FileName /tmp/donels -al /tmp/echo "done!"3、通过apache访问⽇志access.log 统计IP和每个地址访问的次数,按访问量列出前10名。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Thizlinux 系统教程Shell 经典实例----------------Milo经典小shell1 列目录树的shell脚本如下:#!/bin/sh# dtree: Usage: dtree [any directory]dir=${1:-.}(cd $dir; pwd)find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g"2 while中使用read (file是一个文件)cat file | while read linedoecho $lineecho " :: Please input any key(s):c"str4read=""while truedochr4read=`dd if=/dev/tty bs=1 count=1 2>/dev/null`str4read=$str4read$chr4readif [ "$chr4read" = "" ] ;then break; fidoneecho " :: |$str4read|"done3 将多个空格替换为字符sed 's/[ ][ ]*/ /g'如果空格与tab共存时用sed -e 's/[[:space:]][[:space:]]*/ /g' filename4用脚本实现分割文件#!/bin/bashif [ $# -ne 2 ]; thenecho 'Usage: split file size(in bytes)'exitfifile=$1size=$2if [ ! -f $file ]; thenecho "$file doesn't exist"exitfi#TODO: test if $size is a valid integer filesize=`/bin/ls -l $file | awk '{print $5}'` echo filesize: $filesizelet pieces=$filesize/$sizelet remain=$filesize-$pieces*$sizeif [ $remain -gt 0 ]; thenlet pieces=$pieces+1fiecho pieces: $piecesi=0while [ $i -lt $pieces ];doecho split: $file.$i:dd if=$file of=$file.$i bs=$size count=1 skip=$ilet i=$i+1doneecho "#!/bin/bash" > mergeecho "i=0" >> mergeecho "while [ $i -lt $pieces ];" >> merge echo "do" >> mergeecho " echo merge: $file.$i" >> mergeecho " if [ ! -f $file.$i ]; then" >> mergeecho " echo merge: $file.$i missed" >> merge echo " rm -f $file.merged" >> mergeecho " exit" >> mergeecho " fi" >> mergeecho " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >> mergeecho " let i=$i+1" >> mergeecho "done" >> mergechmod u+x merge'5得到上月未日期,格式为YYYYMMDD get_lastday_of_lastmonth(){yy=`date +%Y`mm=`date +%m-1|bc`[ $mm -lt 1 ] && mm=12;yy=`expr $yy - 1` aaa=`cal $mm $yy`dd=`echo $aaa|awk '{print $NF}'`echo $yy$mm$dd}print $NF的$NF是打印最后一个列。

因为awk的内置变量NF是列的总数,而$NF就代表着最后一列6 实现用backup或tar命令来做目录备份需要保持两个目录当中的文件以及属组关系不变。

子目录结构不变,通过管道控制tar 和backup命令,不需要中间的archive,(考虑到速度以及空间的关系)(cd /source && tar cf - .) |(cd /dest && tar zxfp -)偶没有backup 命令,但是tar 用管道可以,tar -cf - dir1 | ( cd dir2; tar -xvf - )搬移大法more aaa.sh#计算两个日期间有多少天#date1,date2:yyyymmdd#Usage:command date1 date2str=$1yy1=`echo $str|cut -c 1-4`mm1=`echo $str|cut -c 5-6`dd1=`echo $str|cut -c 7-8`str=$2yy2=`echo $str|cut -c 1-4`mm2=`echo $str|cut -c 5-6`dd2=`echo $str|cut -c 7-8`count_day=`expr $dd2 - $dd1`while [ $yy2 -ne $yy1 -o $mm2 -ne $mm1 ] domm2=`expr $mm2 - 1`[ $mm2 -eq 0 ] && mm2=12 && yy2=`expr $yy2 - 1`aaa=`cal $mm2 $yy2`bbb=`echo $aaa|awk '{print $NF}'`count_day=`expr $count_day + $bbb`doneecho $count_day7 编写一个只允许用户执行telnet的shell为了监视用户网络操作行为,指定unxi主机给设备管理员登陆,然后用shell控制他。

只可以使用telnet命令,其他一概不许,包括cd,ls等。

就是一个用来远程登陆的管理平台。

我对shell不熟,请指导。

.profile中加入:read addrtelnet $addrexit8 判断文件的访问权限是不是600 ls -l filename | awk '{ if($1 ~ "-rw-------") ..... }'ls -l filename | grep "^-rw------" -c#!/usr/bin/bash#showmod[ $# -eq 0 ] && { echo "Usage: $0 filelist ... "; exit ;}show(){{ [ -d $1 ] && ls -ld $1 ; [ -f $1 ] && ls -la $1 ;} | awk '{umask=0umask_=""for(i=1;i<length($1);i++){if(substr($1,i+1,1)=="r")umask+=4;if(substr($1,i+1,1)=="w")umask+=2;if(substr($1,i+1,1)=="x")umask+=1;if(i%3==0){umask_=sprintf("%s%d",umask_,umask); umask=0;}}printf("%-20.20s: %-10.10s --> %s ",$9,$1,umask_);}';}for file_dir in $*doshow $file_dirdone9 算青蛙的脚本maxcount=$1;count=1;if [ $# -eq 1 ]thenwhile [ $count -le $maxcount ]do echo $count 只青蛙$count 张嘴, `expr $count * 2`只眼睛,`expr $count * 4`条腿; count=`expr $count + 1`;done;elseecho "usage: sendos count"fi10 在SHELL程序中实现‘按任意键继续’在写一个SHELL程序,可是遇到了一个难题,在READ接受输入时,必须按回车键才能确认,而我需要只要按一个键就能得到用户的输入,无须按回车键!有什么好办法呢#!/bin/shget_char(){SA VEDSTTY=`stty -g`stty -echostty rawdd if=/dev/tty bs=1 count=1 2> /dev/nullstty -rawstty echostty $SAVEDSTTY}echo "Press any key to continue..."char=`get_char`如果你的机器上不认stty raw那么把函数中两处出现的raw换成cbreak。

11 在linux环境下启动时打开numlock想在系统启动时自动打开NumLock,可以在/etc/rc.d/rc.local中加入以下内容:for t in 1 2 3 4 5 6 7 8dosetleds +num$t>/dev/nulldone12 在shell里如何限制输入的长度举个例子,比如用户输入用户名时只能给他输入8个字符,如果超过了8个字符光标就停止在第八个字符那儿,不继续,一直等待回车只怕要自己来另写一个SHELL了。

相关文档
最新文档