经典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是打印最后一个列。

30个关于Shell脚本的经典案例(下)

30个关于Shell脚本的经典案例(下)
USER=$(awk -v I=$IP 'I==$1{print $2}' $OLD_INFO) PASS=$(awk -v I=$IP 'I==$1{print $3}' $OLD_INFO) PORT=$(awk -v I=$IP 'I==$1{print $4}' $OLD_INFO) NEW_PASS=$(mkpasswd -l 8) # 随机密码 echo "$IP $USER $NEW_PASS $PORT" >> $NEW_INFO expect -c " spawn ssh -p$PORT $USER@$IP set timeout 2 expect {
初次使用你要注意这几点:
脚本位置参数会与optstring中的单个字母逐个匹配,如果匹配到就赋值给name,否则赋值name为问号;
optstring中单个字母是一个选项,如果字母后面加冒号,表示该选项后面带参数,参数值并会赋冒号,表示屏蔽系统错误(test.sh: illegal option -- h);
允许把选项放一起,例如-ab
下面写一个打印文件指定行的简单例子,引导你思路:
#!/bin/bash
while getopts :f:n: option; do
case $option in
f)
FILE=$OPTARG
[ ! -f $FILE ] && echo "$FILE File not exist!" && exit
\"(yes/no)\" {send \"yes\r\"; exp_continue} \"password:\" {send \"$PASS\r\"; exp_continue} \"$USER@*\" {send \"df -h\r exit\r\"; exp_continue} }" 方法3:将expect脚本独立出来

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脚本100例、练习使用

shell脚本100例、练习使用

shell脚本100例、练习使⽤1、编写hello world脚本#!/bin/bashecho"hello world"2、通过位置变量创建linux系统账户和密码#!/bin/bash#$1是执⾏脚本第⼀个参数 $2是执⾏脚本第⼆个参数useradd "$1"echo"$2" | passwd --stdin "$1"#测试脚本[root@template-host sh1]# sh2.sh aaa 123Changing password for user aaa.passwd: all authentication tokens updated successfully.#测试登录[root@template-host sh1]# su - aaa[aaa@template-host ~]$3、每周五使⽤tar命令备份 /var/log下的所有⽇志⽂件#!/bin/bashtar -czPf log-`date +%y%m%d`.tar.gz /var/log #加P是因为如果不加会出现错误:tar: Removing leading `/' from member names date和+之间注意有空格。

修改系统参数[root@template-host sh1]# crontab -e00 03 * * 5 /data/sh1/3.sh4、⼀键部署LNMP(RPM包版本)#!/bin/bash#此脚本需要提前配置yum源,否则⽆法配置成功。

本脚本使⽤于7.4yum -y install httpdyum -y install mariadb mariadb-devel mariadb-serveryum -y install php php-mysqlsystemctl start httpd mariadb #启动httpd、mariadbsystemctl enable httpd mariadb #加⼊开机⾃启动systemctl status httpd mariadb #查看是否成功5、实时监控本机硬盘内存剩余空间,剩余内存空间⼩于500M,根分区剩余空间⼩于1000M时,发送警报信息到命令⾏#!bin/bash#提取分区剩余空间单位:kbdisk_size=$(df / | awk'/\//{print $4}')#提取内存空间单位Mmem_size=$(free -m | awk'/Mem/{print $4}')while :doif [ $disk_size -le 512000 -o $mem_size -le 1024 ];thenecho"警报:资源不⾜"sleep5fidone6、随机⽣成⼀个100以内的随机数,提⽰⽤户猜数字,提⽰⽤户猜⼤了、猜⼩了、猜对了,直⾄⽤户猜对,脚本结束。

一些基础但有趣的shell脚本

一些基础但有趣的shell脚本

⼀些基础但有趣的shell脚本⼀.打印9*9乘法表1 #!/bin/bash2for i in `seq 9`3do4for j in `seq $i`5do6echo -n "$i*$j=$[i*j]"7done8echo9done⼆.剪⼑⽯头布⼩游戏1 #!/bin/bash2 game=(⽯头剪⼑布)3 num=$[RANDOM%3]4 computer=${game[$num]}5 #随机⽣成出拳可能并存⼊数组game[$num]:game[0],game[1],game[2]分别代表⽯头,剪⼑,布6echo"请根据以下提⽰选择出拳⼿势"7echo"⽯头:1 剪⼑:2 布:3"8 read -p "请出拳:(1,2,3)": person9case $person in101)11if [ $num -eq 0 ];then12echo"平局"13elif [ $num -eq 1 ];then14echo"你赢"15else16echo"计算机赢"17fi;;182)19if [ $num -eq 0 ];then20echo"计算机赢"21elif [ $num -eq 1 ];then22echo"平局"23else24echo"你赢"25fi;;263)27if [ $num -eq 0 ];then28echo"你赢"29elif [ $num -eq 1 ];then30echo"计算机赢"31else32echo"平局"三.猜数字⼩游戏1 #!/bin/bash2 #脚本⽣成⼀个100以内的随机数,提⽰⽤户猜数字,根据⽤户的输⼊,>提⽰猜对了,猜⼤了或猜⼩了,直到⽤户猜对为⽌.3 num=$[RANDOM%100+1] #1~100的随机数4 read -p "计算机已⽣成⼀个1~100的随机数,请您猜:" cai15 l=06while :7do8 let l++9if [ $l -eq 1 ];then10if [ $cai1 -eq $num ];then11echo"恭喜,猜对了"12 exit13elif [ $cai1 -gt $num ];then14echo"猜⼤了"15else16echo"猜⼩了"17fi18else19 read -p "请继续:" cai220if [ $cai2 -eq $num ];then21echo"恭喜,猜对了"22 exit23elif [ $cai2 -gt $num ];then24echo"猜⼤了"25else26echo"猜⼩了"27fi28fi29done四.给三个随机数字排序1.交互式1 #!/bin/bash2 #依次提⽰⽤户输⼊三个整数,脚本根据数字⼤⼩排序输出3个数字3 read -p "请输⼊⼀个整数:" num14 read -p "请输⼊⼀个整数:" num25 read -p "请输⼊⼀个整数:" num36 #从⼩到⼤排序,设定最后输出num1,num2,num3,脚本运⾏中将最⼩,中间,最⼤值分别赋予这三个变量,引⼊对调变量tmp7 tmp=08 #如果num1⼤于num2则对调1和2,保持num1最⼩9if [ $num1 -gt $num2 ];then10 tmp=$num111 num1=$num212 num2=$tmp13fi14 #如果num1⼤于num3则对调1和3,保持num1最⼩15if [ $num1 -gt $num3 ];then16 tmp=$num117 num1=$num318 num3=$tmp19fi20 #如果num2⼤于num3则对调2和3,保持num2更⼩21if [ $num2 -gt $num3 ];then22 tmp=$num223 num2=$num324 num3=$tmp25fi26echo"排序后的数据为:$num1,$num2,$num3"2.⾮交互式1 #!/binbash2 l=03 tmp=04for i in `cat /home/student/桌⾯/shell脚本/⽂档/paixu.txt` #⼀个含3个数字的⽂件 6do7 let l++8if [ $l -eq 1 ];then9 num1=$i10fi11if [ $l -eq 2 ];then12 num2=$i13if [ $num1 -gt $num2 ];then14 tmp=$num115 num1=$num216 num2=$tmp17fi18fi19if [ $l -eq 3 ];then20 num3=$i21if [ $num1 -gt $num3 ];then22 tmp=$num123 num1=$num324 num3=$tmp25fi26if [ $num2 -gt $num3 ];then27 tmp=$num228 num2=$num329 num3=$tmp30fi31fi32done33echo"从⼩到⼤排序:$num1,$num2,$num3"五.点名器1 #!/bin/bash2 #提前准备⽂件user.txt,⼀⾏⼀个姓名3 read -p "请输⼊想要抽到的⼈数:" xxx4 l=15while [ $l -le $xxx ]6do7 let l++8 line=`cat /home/student/桌⾯/shell脚本/⽂档/user.txt | wc -l`9 num=$[RANDOM%line+1]10sed -n "${num}p" /home/student/桌⾯/shell脚本/⽂档/user.txt11sleep0.512done六.打印国际象棋棋盘1 #!/bin/bash2 #两个变量i和j代表⾏和列3for i in {1..8}4do5for j in {1..8}6do7sum=$[i+j]8if [ $[sum%2] -eq 0 ];then #偶数9echo -ne "\033[46m \033[0m"10else11echo -ne "\033[47m \033[0m"12fi13done14echo15done七.fork炸弹(会快速消耗计算机资源,导致计算机死机)(请在虚拟机中实验,千万不要在真机尝试,若操作失误请重启计算机)1 .(){2 .|.&3 }4 .⼋.打印斐波那契数列(后⼀个数字永远是前两个数字之和)1 #!/bin/bash2 list=(01)3for i in `seq211`4do5 list[$i]=`expr ${list[-1]} + ${list[-2]}`6done7echo ${list[@]}九.打印⼀些特殊图形1 #!/bin/bash2clear3for ((i=1;i<=9;i++))4do5for((j=1;j<=i;j++))6do7echo -n "$i"8done9echo""10done11 #图11213 read -n1 "按任意键继续" key14clear15for ((i=1;i<=5;i++))16do17for((j=1;j<=i;j++))18do19echo -n "|"20done21echo"_"22done23 #图22425 read -n1 "按任意键继续" key 26clear27for ((i=1;i<=5;i++))28do29for((j=1;j<=i;j++))30do31echo -n "*"32done33echo""34done3536for ((i=5;i>=1;i--))37do38for((j=1;j<=i;j++))39do40echo -n "*"41done42echo""43done44 #图3。

shell编程100例及代码注释——持续更新

shell编程100例及代码注释——持续更新

shell编程100例及代码注释——持续更新1、编写hello world脚本#!/bin/bashecho"Hello World!"2、通过位置变量创建 Linux 系统账户及密码#!/bin/bashuseradd "$1"echo"$2" | passwd‐‐stdin "$1"#$1 是传给脚本的第⼀个参数,$2 是传给脚本的第⼆个参数# 命名为test.sh,保存退出,调⽤:# bash Test.sh yln 123# 创建了名为yln,密码为123的账户3、备份⽇志# 每周 5 使⽤ tar 命令备份/var/log 下的所有⽇志⽂件# 编写备份脚本,备份后的⽂件名包含⽇期标签,防⽌后⾯的备份将前⾯的备份数据覆盖#!/bin/bash# vim /root/logbak.shtar -czf log-`date +%Y%m%d`.tar.gz /var/log# date使⽤反引号括起来,反引号表⽰引号内部的字符作为命令执⾏,+%Y%m%d限定了date的格式是年⽉⽇,反引号在键盘<tab>键上⾯# 脚本调⽤:# crontab ‐e是指系统在某个时间执⾏的特定的命令或程序,后⾯的五个数字位是任务执⾏设置,分别代表分钟,⼩时,⽇,⽉,星期⼏调⽤logbak.shcrontab ‐e 0003 * * 5 /root/logbak.sh4、⼀键部署 LNMP(RPM 包版本)# LNMP是Linux + nginx + mysql + PHP,# 编译安装需要输⼊⼤量的命令,如果是配置⽣产环境需要耗费⼤量的时间。

# 搭建好LNMP环境之后就⽆需⼀个⼀个的输⼊命令,⽆需值守,编译安装优化编译参数,# 提⾼性能,解决不必要的软件间依赖,特别针对配置⾃动优化。

# ⼀键部署 LNMP(RPM 包版本)# 使⽤ yum 安装部署 LNMP,需要提前配置好 yum 源,否则该脚本会失败# 本脚本使⽤于 centos7.2 或 RHEL7.2#!/bin/bashyum‐y install httpd # httpd(⽹页伺服器)实际上是Apache,它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。

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指令非常丰富和灵活,可以根据具体需求进行组合和扩展,以实现更复杂的操作。

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

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
C) echo "your selection is Copy" ;;
D) echo "your selection is Delete" ;;
B) echo "your selection is Backup" ;;
Q) echo "Exit ..." break ;;
*) echo "invalid selection,please try again"
echo "Not enough parameters" exit 0 fi if [ $1 -eq $2 ]; then echo "$1 equals $2"
elif [ $1 -lt $2 ]; then echo "$1 less than $2"
elif [ $1 -gt $2 ]; then echo "$1 greater than $2"
#break
done
# !/bin/bash
# list a content summary of a number of RPM packages
# USAGE: showrpm rpmfile1 rpmfile2 ...
# EXAMPLE: showrpm /cdrom/Thizlinux/RPMS/*.rpm
for rpmpackage in $*;
do
if [ -r "$rpmpackage" ];
then
echo "=============== $rpmpackage =============="
/bin/rpm -qip $rpmpackage
else
echo "ERROR: cannot read file $rpmpackage"
则循环刚才的过程,否则退出。
#!/bin/bash
# favourite OS.
samli
2004.4.19
echo "What is your favourite OS?"
select var in "Linux" "UNIX" "Windows" "Other"; do
echo "You have selected $var."
# #answer="no" # #e cho "***********************************************************************" #e cho "Please press "Enter" key to continue"
#read #while [ $answer = "no" ] #do # echo # echo "1.Are you a boy ? (yes/no)" # read answer #done # #answer="no" # #until [ $answer = "yes" ] #do # echo # echo "2.Are you foolish ? (yes/no)" # read answer #done # #answer="no" # #until [ $answer = "yes" ] #do # echo # echo "3.Do you love me ? (yes/no)" # read answer #done # #e cho "***********************************************************************" #e cho #e cho "Now ! I know you are a foolish girl and you love me."
#! /bin/sh sum=0 for i in $* do
sum=`expr $sum + $i` done echo $sum abc=123 echo $abc
###定义函数 example1() { abc=456 } ###调用函数 example1 echo $abc abc=234234 example1 echo $abc ###定义函数,使用参数 example2() { echo $1 echo $2 } ###调用函数,向它传递参数 example2 abc bbb example2 dksdfsdfsfaa bbb #!/bin/bash echo "please input a file name:" read file_name if [ -d $file_name ] then echo "$file_name is a directory" elif [ -f $file_name ] then echo "$file_name is a regular file" elif [ -c $file_name -o -b $file_name ] then echo "$file_name is a device file" else echo "$file_name is an unkonwn file" fi #! /bin/sh read first second third echo "the first parameter is $first" echo "the second parameter is $second" echo "the third parameter is $third" #! /bin/sh if [ $# -ne 2 ]; then
read op
case $op in
C)
echo "your selection is Copy"
;;
D)
echo "your selection is Delete"
;;
B)
samli
2004.4.19
echo "your selection is Backup" ;; *)
echo "invalid selection" esac #! /bin/sh while true do
tar jxvf $1
;; gz)
tar zxvf
$1
;; *)
echo "wrong file type"esac6.写一个脚本以方便用户查询 rpm 的
相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户
选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是
if [ "$var" = "end" ]
then
break
fi
echo "var is $var"
相关文档
最新文档