shell脚本实例

合集下载

shell脚本案例

shell脚本案例

shell脚本案例Shell脚本是将一系列的命令写入脚本文件中,让其运行时具备特定的功能。

Shell脚本的一大优势是可以实现一步操作多项任务,在繁重的日常任务管理与网络管理领域中都有着广泛的应用。

本文将着重介绍几个常见的Shell脚本案例,让读者了解有关Shell脚本的实际操作方法。

第一个脚本是批量更改文件所有者及所有组的脚本,代码如下: #!/bin/bashfiles=`ls -A`user=usernamegroup=groupnamefor file in $files; dochown $user:$group $filedone这个脚本首先列出当前工作目录下的文件,并将所有者及所有组设置为指定的两个用户,最后应用chown命令将文件的所有者和所有组都更改为给定的用户及组。

第二个脚本是用来实现文件/文件夹的备份的脚本,代码如下: #! /bin/bashsrcdir=/srcdirbackdir=/backdirmkdir -p $backdircp -R $srcdir/* $backdir这个脚本将指定的源文件夹srcdir的所有内容复制到一个备份文件夹backdir中,确保原文件的完整性。

第三个脚本是用来批量修改文件权限的,代码如下:#! /bin/bashfiles=`ls -A`for file in $files; dochmod -R 755 $filedone这个脚本将当前工作目录下的所有文件/文件夹的可读写权限设置为755,755权限可让所有者及同一组用户可以具有执行及读写权限,而其他用户只有可以读取权限。

以上三个案例展示了Shell脚本的强大功能,能够帮助用户快速完成一系列的工作,避免执行重复的操作,非常适合用作日常任务的自动化管理。

Shell脚本操作简单,编写起来也比较简单,学习它也并不困难,只要用户掌握一定的shell基础知识就可以编写出非常强大的脚本文件。

此外,Shell脚本还可以通过cron计划任务实现定时执行操作,能够有效的节省用户的时间。

用shell脚本监控进程是否存在不存在则启动的实例

用shell脚本监控进程是否存在不存在则启动的实例

⽤shell脚本监控进程是否存在不存在则启动的实例⽤shell脚本监控进程是否存在不存在则启动的实例,先上代码⼲货:#!/bin/shps -fe|grep processString |grep -v grepif [ $? -ne 0 ]thenecho "start process....."elseecho "runing....."fi#####processString 表⽰进程特征字符串,能够查询到唯⼀进程的特征字符串0表⽰存在的$? -ne 0 不存在,$? -eq 0 存在定时执⾏:crontab -e0 04,12,21 * * * /bin/bash /home/mysh/monitorprocess.sh每天晚上4点,中午12点,晚上21点检测0 4,12 * * *分时⽇⽉周* 04,12 * * * 这个是指4点和12点中每分钟执⾏⼀次0 4,12 * * * 4点12点第0分钟执⾏⼀次扩展相关知识:shell的if else 语法以及⼤于,⼩于等逻辑表达式:if ....; then ....elif ....; then ....else ....fi⼤多数情况下,可以使⽤测试命令来对条件进⾏测试。

⽐如可以⽐较字符串、判断⽂件是否存在及是否可读等等… 通常⽤" [ ] "来表⽰条件测试。

注意这⾥的空格很重要。

要确保⽅括号的空格。

[ -f "somefile" ] :判断是否是⼀个⽂件[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执⾏权限[ -n "$var" ] :判断$var变量是否有值[ "$a" = "$b" ] :判断$a和$b是否相等 -r file ⽤户可读为真 -w file ⽤户可写为真 -x file ⽤户可执⾏为真 -f file ⽂件为正规⽂件为真 -d file ⽂件为⽬录为真 -c file ⽂件为字符特殊⽂件为真 -b file ⽂件为块特殊⽂件为真 -s file ⽂件⼤⼩⾮0时为真 -t file 当⽂件描述符(默认为1)指定的设备为终端时为真######################################################### 含条件选择的shell脚本对于不含变量的任务简单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

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脚本独立出来

shell读取excel代码实例

shell读取excel代码实例

shell读取excel代码实例在实际工作中,我们经常需要处理Excel表格中的数据。

而使用shell脚本来读取Excel表格可以提高工作效率。

下面将介绍一种使用shell脚本读取Excel表格的代码实例。

我们需要安装一个工具——`xls2csv`,它可以将Excel文件转换为CSV格式,方便我们在shell脚本中进行处理。

可以通过以下命令安装`xls2csv`:```shellsudo apt-get install catdoc```安装完成后,我们可以通过以下代码实现读取Excel表格并输出内容:```shell#!/bin/bash# 将Excel文件转换为CSV格式xls2csv input.xls > output.csv# 逐行读取CSV文件while IFS=',' read -r col1 col2 col3do# 输出每一行的内容echo "列1: $col1"echo "列2: $col2"echo "列3: $col3"done < output.csv```以上代码中,我们使用了`xls2csv`命令将Excel文件`input.xls`转换为CSV格式,并将转换后的内容保存到`output.csv`文件中。

然后,我们使用`while`循环逐行读取`output.csv`文件,并将每一行的内容分别赋值给变量`col1`、`col2`和`col3`。

最后,我们输出每一行的内容。

需要注意的是,以上代码假设Excel表格中有三列数据,分别对应变量`col1`、`col2`和`col3`。

如果Excel表格中的列数不同,需要调整代码中的变量个数和`echo`语句的输出。

为了使代码更加灵活,我们还可以将读取Excel表格的代码封装为一个函数,方便在其他脚本中调用。

以下是封装为函数的代码实例:```shell#!/bin/bash# 读取Excel表格的函数function read_excel() {local excel_file=$1# 将Excel文件转换为CSV格式xls2csv $excel_file > output.csv# 逐行读取CSV文件while IFS=',' read -r col1 col2 col3do# 输出每一行的内容echo "列1: $col1"echo "列2: $col2"echo "列3: $col3"done < output.csv}# 调用函数读取Excel表格read_excel input.xls```以上代码中,我们定义了一个名为`read_excel`的函数,该函数接受一个参数`excel_file`,用于指定要读取的Excel文件。

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。

dolphinscheduler shell使用实例

dolphinscheduler shell使用实例

dolphinscheduler shell使用实例DolphinScheduler 是一个开源的、分布式的、易扩展的任务调度系统。

在DolphinScheduler 中,Shell 脚本是一种常见的任务类型,用于执行一系列的命令行操作。

下面是DolphinScheduler 中使用Shell 脚本的简单示例:1. 创建一个Shell 脚本:假设你有一个名为`myscript.sh` 的Shell 脚本,内容如下:```bash#!/bin/bashecho "Hello from DolphinScheduler Shell Task"date```2. 上传Shell 脚本到DolphinScheduler:在DolphinScheduler 的任务管理界面中,创建一个新的Shell 任务,然后上传`myscript.sh`。

3. 配置Shell 任务参数:在DolphinScheduler 中,配置Shell 任务的参数,例如设置脚本的路径和其他相关的执行参数。

4. 定义调度规则:配置任务的调度规则,例如任务何时运行、运行频率等。

5. 保存并启动任务:保存配置并启动任务,DolphinScheduler 将按照配置的规则执行你的Shell 脚本。

请注意,这只是一个简单的示例。

在实际应用中,你可能需要更复杂的脚本和更精细的任务调度设置。

此外,DolphinScheduler 还支持并发执行、任务依赖、任务日志查看等功能,以支持更复杂的任务管理需求。

具体的使用细节可能会因DolphinScheduler 的版本和配置而有所不同,建议查阅DolphinScheduler 的官方文档以获取更详细的信息。

Shell脚本常用模板

Shell脚本常用模板

Shell脚本常⽤模板 作为⼀个运维⼈员编写Shell脚本是很平常的,⼀个格式好的脚本不仅赏⼼悦⽬,后期⾃⼰和别⼈也易于维护。

下⾯的脚本就是我⾃⼰的shell编写格式,如下:1 [root@mini05 20180930-2]# cat template.sh2 #!/bin/sh3 ################ Version Info ##################4 # Create Date: 2018-09-295 # Author: Zhang6 # Mail: zhang@7 # Version: 1.08 # Attention: shell脚本模板9 ################################################1011 # 加载环境变量12 # 如果脚本放到crontab中执⾏,会缺少环境变量,所以需要添加以下3⾏13 . /etc/profile14 . ~/.bash_profile15 . /etc/bashrc1617 # 脚本所在⽬录即脚本名称18 script_dir=$( cd "$( dirname "$0" )" && pwd )19 script_name=$(basename ${0})20 # ⽇志⽬录21 log_dir="${script_dir}/log"22 [ ! -d ${log_dir} ] && {23mkdir -p ${log_dir}24 }2526 errorMsg(){27echo"USAGE:$0 arg1 arg2 arg3"28 exit 229 }303132 doCode() {33echo $134echo $235echo $336 }3738 main() {39if [ $# -ne 3 ];then40 errorMsg41fi42 doCode "$1""$2""$3"43 }4445 # 需要把隐号加上,不然传⼊的参数就不能有空格46 main "$@"测试如下:1 [root@mini05 20180930-2]# ./template.sh2 USAGE:./template.sh arg1 arg2 arg33 [root@mini05 20180930-2]# ./template.sh1114 USAGE:./template.sh arg1 arg2 arg35 [root@mini05 20180930-2]# ./template.sh111'222 333'6 USAGE:./template.sh arg1 arg2 arg37 [root@mini05 20180930-2]# ./template.sh111'222 333'"444 555"811192223331044455511 [root@mini05 20180930-2]# ./template.sh111'222 333'"444 555""666"12 USAGE:./template.sh arg1 arg2 arg3。

怎么用shell脚本写一个HelloWorld

怎么用shell脚本写一个HelloWorld

怎么用shell脚本写一个HelloWorld
Unix/linux可以带你进入shell(Bash)的殿堂,但是它不会涉及太多的知识,只是一个Hello World。

下面是店铺收集整理的怎么用shell脚本写一个HelloWorld,希望对大家有帮助~~
用shell脚本写一个HelloWorld的方法
工具/原料
一台装有bash的Unix或者类Unix系统
方法/步骤
1登入bash。

touch HelloWorld.sh
新建一个HelloWorld.sh文件,bash没有明文规定需要.sh标识,但是为了统一规范,请使用.sh标识。

别做奇葩。

vim打开它。

没有vim用vi。

按下A或者I或者insert插入。

输入以下内容:
#!/bin/bash
echo Hello World!
#!/bin/bash
#!是代表这是一个解释程序
/bin/bash是bash的绝对路径。

echo 是一个打印命令,它会把参数内容当做字符串打印到STDOUT(标准输出设备),当然,有一些参数,例如-e可以让它识别转义字符。

现在,我们按下ESC
输入“:”
请原谅我把它们分为两个部分,原因是我怕你搞混其中的语意。

输入:wq
保存退出。

w是write写的意思
q是quit退出的意思
然后按下回车
保存完它会自动退出vim 最后
bash HelloWorld.sh
运行它。

然后看到结果。

shell脚本案例

shell脚本案例

shell脚本案例1.设计⼀个shell程序,添加组为class1,然后添加属于这个组的30个⽤户,⽤户名为 stuxx,其中xx从01到 30#!/bin/bashi=1groupadd class1while [ $i -le 30 ]doif [ $i -le 9 ];thenUSERNAME=stu0${i}elseUSERNAME=stu${i}fiuseradd $USERNAMEmkdir /home/$USERNAMEchown -R $USERNAME /home/$USERNAMEchgrp -R class1 /home/$USERNAMEi=$(($i+1))done2.编写⼀个shell程序,实现⾃动删除30个账号的功能,账户名为stu01⾄stu30#!/bin/bashi=1while [ $i -le 50 ]doif [ $i -le 9 ];thenname=stu0$ielsename=stu$ifiuserdel -r $namei=$(($i+1))done3.设计⼀个shell程序,在每⽉第⼀天备份并压缩/etc⽬录的所有内容,存放在 /root/back⽬录⾥,且⽂件名未如下命名格式,yy为年mm为⽉,dd为⽇。

shell程序fileback存放在/usr/bin⽬录下。

(1)编写shellx程序fileback#!/bin/bashDIRNAME=`ls /root/back`if [ $? -eq 0 ];thensleep 3exit 1elsemkdir /root/backcd /root/backYY=`date +%y`MM=`date +%m`DD=`date +%d`BACKETC=$YY$MM$DD_etc.tar.gztar zcvf $BACKETC /etc/echo "fileback finished"fi(2)编写定时任务echo "0 0 1 * * /bin/sh /usr/bin/fileback" > /root/etc_backcrontab /root/etc_back或者使⽤crontab -e添加定时任务0 0 1 * * /bin/sh /usr/bin/fileback3.设计⼀个shell程序,在/userdate⽬录下创建50个⽬录,即user1-user20,并设置每个⽬录的权限,其他⽤户的权限为:读,⽂件所有者的权限为:读,写执⾏,⽂件所有者所在的组的权限为:读,执⾏。

Shell脚本去重的几种方法实例

Shell脚本去重的几种方法实例

Shell脚本去重的⼏种⽅法实例测试⽂件复制代码代码如下:[root@bogon ~]# cat >testjasonjasonjasonfffffjason按 Ctr + D保存1、sort -u复制代码代码如下:[root@bogon ~]# sort -u testfffffjason2、uniq复制代码代码如下:[root@bogon ~]# uniq testjasonfffffjason由此可见,uniq需要先排序后才能去重3、sort、管道和uniq结合运⽤去除重复并保留⼀份重复的数据复制代码代码如下:[root@bogon ~]# sort test|uniqfffffjason 去除所有重复的⾏(不保留重复的⾏),并计算⾏数复制代码代码如下:[root@bogon ~]# sort test|uniq -uc1 fffff 找出所有重复的⾏,并计算⾏数复制代码代码如下:[root@bogon ~]# sort test|uniq -dc4 jason根据某个字段去重将原有数据改为复制代码代码如下:[root@bogon ~]# more testjason 1jason 2jason 1fffff 2jason 3[root@bogon ~]# sort -k 1,1 -u testfffff 2jason 1 man sort查看sort的⽤法,-k参数是这么描述的:复制代码代码如下: -k, --key=POS1[,POS2] start a key at POS1 (origin 1), end it at POS2 (default end of line) 也就是说-k哪⼏个列进⾏排序,pos1是开始列,pos2是结束列。

100个非常实用的Shell拿来就用脚本实例

100个非常实用的Shell拿来就用脚本实例

100个⾮常实⽤的Shell拿来就⽤脚本实例转载https:///i6921165421349487107/?wid=1620965217918shell脚本是帮助程序员和系统管理员完成费时费⼒的枯燥⼯作的利器,是与计算机交互并管理⽂件和系统操作的有效⽅式。

区区⼏⾏代码,就可以让计算机接近按照你的意图⾏事。

博智互联为⼤家整理了100个实例,通过100个实战经典脚本实例,展⽰了shell脚本编程的实⽤技术和常见⼯具⽤法。

⼤家只需根据⾃⼰的需求,将⽂中这些常见任务和可移植⾃动化脚本推⼴应⽤到其他类似问题上,能解决那些三天两头碰上的⿇烦事。

判断⽤户输⼊的是否为数字⽅法1:#!/bin/bashif [[ $1 =~ ^[0-9]+$ ]]; thenecho "Is Number."elseecho "No Number."fi⽅法2:#!/bin/bashif [ $1 -gt 0 ] 2>/dev/null; thenecho "Is Number."elseecho "No Number."fi⽅法3:#!/bin/bashecho $1 |awk '{print $0~/^[0-9]+$/?"Is Number.":"No Number."}' #三⽬运算符12.14 找出包含关键字的⽂件DIR=$1KEY=$2for FILE in $(find $DIR -type f); doif grep $KEY $FILE &>/dev/null; thenecho "--> $FILE"fidone监控⽬录,将新创建的⽂件名追加到⽇志中场景:记录⽬录下⽂件操作。

需先安装inotify-tools软件包。

#!/bin/bashMON_DIR=/optinotifywait -mq --format %f -e create $MON_DIR |\while read files; doecho $files >> test.logdone给⽤户提供多个⽹卡选择场景:服务器多个⽹卡时,获取指定⽹卡,例如⽹卡流量#!/bin/bashfunction local_nic() {local NUM ARRAY_LENGTHNUM=0for NIC_NAME in $(ls /sys/class/net|grep -vE "lo|docker0"); doNIC_IP=$(ifconfig $NIC_NAME |awk -F'[: ]+' '/inet addr/{print $4}')if [ -n "$NIC_IP" ]; thenNIC_IP_ARRAY[$NUM]="$NIC_NAME:$NIC_IP" #将⽹卡名和对应IP放到数组let NUM++fidoneARRAY_LENGTH=${#NIC_IP_ARRAY[*]}if [ $ARRAY_LENGTH -eq 1 ]; then #如果数组⾥⾯只有⼀条记录说明就⼀个⽹卡NIC=${NIC_IP_ARRAY[0]%:*}return 0elif [ $ARRAY_LENGTH -eq 0 ]; then #如果没有记录说明没有⽹卡echo "No available network card!"exit 1else#如果有多条记录则提醒输⼊选择for NIC in ${NIC_IP_ARRAY[*]}; doecho $NICdonewhile true; doread -p "Please enter local use to network card name: " INPUT_NIC_NAMECOUNT=0for NIC in ${NIC_IP_ARRAY[*]}; doNIC_NAME=${NIC%:*}if [ $NIC_NAME == "$INPUT_NIC_NAME" ]; thenNIC=${NIC_IP_ARRAY[$COUNT]%:*}return 0elseCOUNT+=1fidoneecho "Not match! Please input again."donefi}local_nicMySQL数据库备份#!/bin/bashDATE=$(date +%F_%H-%M-%S)HOST=192.168.1.120DB=testUSER=bakPASS=123456MAIL="zhangsan@ lisi@"BACKUP_DIR=/data/db_backupSQL_FILE=${DB}_full_$DATE.sqlBAK_FILE=${DB}_full_$DATE.zipcd $BACKUP_DIRif mysqldump -h$HOST -u$USER -p$PASS --single-transaction --routines --triggers -B $DB > $SQL_FILE; thenzip $BAK_FILE $SQL_FILE && rm -f $SQL_FILEif [ ! -s $BAK_FILE ]; thenecho "$DATE 内容" | mail -s "主题" $MAILfielseecho "$DATE 内容" | mail -s "主题" $MAILfifind $BACKUP_DIR -name '*.zip' -ctime +14 -exec rm {} \;Nginx服务管理脚本场景:使⽤源码包安装Nginx不含带服务管理脚本,也就是不能使⽤"service nginx start"或"/etc/init.d/nginx start",所以写了以下的服务管理脚本。

Shell脚本从文件中逐行读取内容的几种方法实例

Shell脚本从文件中逐行读取内容的几种方法实例

Shell脚本从⽂件中逐⾏读取内容的⼏种⽅法实例从⽂件逐⾏读取数据的⽅法有两种,⼀种是在while循环或until循环中使⽤read命令,通过⽂件描述符⼀⾏⼀⾏的读取⽂件内容;另⼀种是在for循环中使⽤cat <filename>来读取⽂件的内容。

1.使⽤for循环从⽂件中逐⾏读取内容:在默认情况现下此⽅法是逐个单词的读取⽂件内容,因为使⽤这种⽅法读取⽂件时,他使⽤环境变量IFS的值作为分隔符,由于IFS的默认值是“<space/空格>”“<tab/制表符>”“<newline/新⾏>”,所以他⾸先以空格作为分隔符来读取⽂件内容,因此如果使⽤for循环逐⾏读取内容,在for循环开始之前需要先修改变量IFS的值,等for循环结束后再将IFS的值改回来。

⽰例1:#!/bin/bashbak=$IFS #定义⼀个变量bak保存IFS的值if [ $# -ne 1 ];then #判断位置参数是否为1echo "Usage $0 filename"exitfiif [ ! -f $1 ];then #判断位置参数是否为⽂件echo "the $1 is not a file"exitfiIFS=$'\n' #将环境变量IFS的值修改为换⾏符for i in `cat $1` #逐⾏读取⽂件内容并打印到屏幕doecho $idoneIFS=$bak #将环境变量IFS的值改回原值⽰例2:如果不修改变量IFS的值,系统默认按照IFS的原值,按空格来读取⽂件#!/bin/bashif [ $# -ne 1 ];thenecho "Usage $0 filename"exitfiif [ ! -f $1 ];thenecho "the $1 is not a file"exitfifor i in `cat $1`doecho $idone2.在脚本中定义代码块,使⽤重定向逐⾏读取⽂件内容:⽰例:#!/bin/bashif [ $# -ne 1 ];then #判断脚本参数是否为1echo "Usage:$0 filename"exit 1fifile=$1 #将脚本参数参数赋值给变量file{ #定义代码块,⼤括号{}中的代码即为代码块read line1read line2} <$file #使⽤$file将代码块的标准输⼊指向⽂件$fileecho "first line in $file is $line1" #输出⽂件内容echo "second line in $file is $line2"exit 23.使⽤while循环结合read命令逐⾏读取⽂件内容:#!/bin/bashif [ $# -ne 1 ];thenecho "Usage:$0 filename"exit 1fifile=$1if [ ! -f $file ];thenecho "the $file is not a file"exit 2ficount=0while read line #使⽤read命令循环读取⽂件内容,并将读取的⽂件内容赋值给变量linedolet count++echo "$count $line"done <$file #“done <$file”将整个while循环的标准输⼊指向⽂件$fileecho -e "\ntotle $count lines read"exit 0总结以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。

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`命令执行脚本。

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

输出执行操作和打印日志的shell脚本实例

输出执行操作和打印日志的shell脚本实例

输出执⾏操作和打印⽇志的shell脚本实例cat /mnt/log_function.sh#!/bin/bash#log function####log_correct函数打印正确的输出到⽇志⽂件function log_correct () {DATE=`date “+%Y-%m-%d %H:%M:%S”` ####显⽰打印⽇志的时间USER=$(whoami) ####那个⽤户在操作echo “${DATE} ${USER} execute $0 [INFO] $@” >>/var/log/log_info.log ######($0脚本本⾝,$@将参数作为整体传输调⽤)}log_error打印shell脚本中错误的输出到⽇志⽂件function log_error (){DATE=`date “+%Y-%m-%d %H:%M:%S”`USER=$(whoami)echo “\${DATE} \${USER} execute \$0 [INFO] \$@” >>/var/log/log_error.log}###fn_log函数通过if判断执⾏命令的操作是否正确,并打印出相应的操作输出function fn_log (){if [ $? -eq 0 ]thenlog_correct “$@ sucessed!”echo -e “\033[32m $@ sucessed. \033[0m”elselog_error “$@ failed!”echo -e “\033[41;37m $@ failed. \033[0m”exitfi}知识点:(1) $?判断执⾏命令的返回值,命令执⾏正确返回0,命令执⾏错误返回1(2)”$@” 将执⾏命令以⼀个参数的形式显⽰出来。

(3)echo -e “\033[32m $@ sucessed. \033[0m” 成功时以红⾊形式显⽰执⾏命令的内容。

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

break
;;
info)
option=$option"i"
break
*)
echo "please choose between 1-3"
;;
esac
done
echo "what do you want to know?"
注:上面有一行,for a in `seq 1 10`,其中seq 1 10 , 即列出现1到10之间所有的数字,这一行也可改为:for a in "1 2 3 4 5 6 7 8 9 10"
2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然
option=$option"f"
read argument
break
;;
package\ name)
;;
package\ name)
break
;;
*)
echo "please choose between 1-3"
select var in "location" "info" "package name"
do
case $var in
location)
option=$option"l"
case ${1##*.tar.} in
bz2)
gz)
tar zxvf $1
;;
*)
echo "wrong file type"
后打印出该数值,然后再次要求用户输入数值。直到用户输入
"end"停止。
#!/bin/sh
unset var
while [ "$var" != "end" ]
do
echo -n "please input a number: "
read var
;;
esac
done
${RPM} $option $argument
echo "continue? [yes/no]"
read answer
All)
option=$option"a"
break
;;
file)
echo -n "please input file name: "
#!/bin/sh
sum=0
for a in `seq 1 100`
do
if [ `expr $a % 3` -ne 0 ]
then
continue
fi
echo $a
if [ answer = "no" ]
then
break
fi
done

sum=`expr $sum + $a`
done
echo "sum = $sum"
4.一个函数,利用shift计算所有参数乘积,假设参数均为整数( 特殊变量$# 表示包含参数的个数)
#! /bin/sh
result=1
while [ $# -gt 0 ]
option="-q"
while true
do
echo "what to query?"
select var in "All" "file" "package name"
do
case $var in
esac
6.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如
文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,
包的信息等。然后询问是否继续查询,是则循环刚才的过
程,否则退出。
#!/bin/sh
RPM=/bin/rpm
shell脚本实例
1. 写一个脚本,利用循环计算10的阶乘
#!/bin/sh
factorial=1
for a in `seq 1 10`
do
factorial=`expr $factorial \* $a`
done
echo "10! = $factorial"
if [ "$var" = "end" ]
then
break
fi
echo "var is $var"
done
3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和
echo -n "please input package name: "
read argument
break
;;
do
result=`expr $result \* $1`
shift
done
echo $result
5.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。
#!/bin/sh
相关文档
最新文档