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```。

  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了。

相关文档
最新文档