经典shell-脚本实例

合集下载

shell循环详解及实例

shell循环详解及实例

shell循环详解及实例⼀、条件选择、判断(if、case)1.1 if语句⽤法及实例当我们在脚本中遇到需要判断的时候,我们就可以⽤if语句来实现。

具体的语法如下:单分⽀if 判断条件;then 条件为真的分⽀代码 fi双分⽀if 判断条件; then条件为真的分⽀代码else条件为假的分⽀代码fi多分⽀if 判断条件1; then条件为真的分⽀代码elif 判断条件2; then条件为真的分⽀代码elif 判断条件3; then条件为真的分⽀代码else以上条件都为假的分⽀代码fi在多分⽀中,系统会逐条判断你写⼊的条件,第⼀次遇到“真”条件时,执⾏该分⽀,⽽后结束整个if语句。

注意:1、if和fi是成对出现的2、if语句可以嵌套。

Example:1)判断两个数字的⼤⼩1 #!/bin/bash2 #定义变量3 read -p "Please input the first num:" num14 read -p "Please input the second num:" num25 #判断数字是否符合标准6 if [[ $num1 =~ ^[0-9]+$ && $num2 =~ ^[0-9]+$ ]];then7 # 判断两个数字的⼤⼩并输出判断结果8 if [ $num1 -lt $num2 ];then9 echo "The num2 is biger than the num1"10 elif [ $num1 -eq $num2 ];then11 echo "Two numbers equal"12 else13 echo "The num1 is biger than the num2"14 fi15 else16 echo "Please enter the correct number"17 fi1819 #删除变量20 unset num1 num22)编写脚本/root/bin/createuser.sh,实现如下功能:使⽤⼀个⽤户名做为参数,如果指定参数的⽤户存在,就显⽰其存在,否则添加之;显⽰添加的⽤户的id号等信息1 #!/bin/bash2 #定义变量3 read -p "请输⼊⼀个⽤户名:" name4 #判断⽤户名是否存在5 if `id $name &> /dev/null`;then6 # 若存在,则输出ID等信息7 echo "⽤户存在,⽤户的ID信息为:`id $name`"8 else9 # 若不存在,则添加⽤户,设置密码为随机8位,下次登录时提⽰修改密码,同时显⽰ID等信息10 passwd=`cat /dev/urandom |tr -cd [:alpha:] |head -c8`11 `useradd $name &> /dev/null`12 `echo "$passwd" | passwd --stdin $name &> /dev/null`13 echo "⽤户名:$name 密码: $passwd" >> user.txt14 `chage -d 0 $name`15 echo "⽤户已添加,⽤户的ID信息为:`id $name` 密码为:$passwd"16 fi1718 #删除变量19 unset name passwd1.2 case⽤法及实例当涉及到多个条件匹配的时候,我们⽤if可能就很⿇烦了,这个时候,我们就可以⽤case来编写这个脚本。

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

Shell脚本编写高级技巧使用循环结构处理多个文件

Shell脚本编写高级技巧使用循环结构处理多个文件

Shell脚本编写高级技巧使用循环结构处理多个文件Shell脚本是一种命令行解释器,它可以运行包含一系列命令的脚本文件。

在Shell脚本编写过程中,循环结构是非常重要的一个概念。

使用循环结构,我们可以有效地处理多个文件。

本文将介绍一些Shell脚本编写的高级技巧,来使用循环结构处理多个文件。

一、批量重命名文件在某些情况下,我们需要对多个文件进行批量重命名操作。

使用Shell脚本可以很方便地实现这个功能。

下面是一个示例代码,来演示如何批量重命名以.txt结尾的文件为以.bak结尾:```#!/bin/bashfor file in *.txtdomv "$file" "${file%.*}.bak"done```在这个脚本中,首先使用`for`循环遍历所有以.txt结尾的文件。

然后使用`mv`命令将文件重命名为以.bak结尾的文件。

二、批量复制文件有时候我们需要将一个目录下的文件复制到另一个目录,使用Shell 脚本编写可以很方便地实现这个功能。

下面是一个示例代码,来演示如何将一个目录下的所有文件复制到另一个目录:```#!/bin/bashsource_dir="/path/to/source/dir"target_dir="/path/to/target/dir"for file in $source_dir/*docp "$file" "$target_dir"done```在这个脚本中,首先通过变量`source_dir`指定源目录,通过变量`target_dir`指定目标目录。

然后使用`for`循环遍历所有源目录下的文件,并使用`cp`命令将文件复制到目标目录。

三、批量处理文件中的内容有时候我们需要对多个文件中的内容进行批量处理,使用Shell脚本编写可以很方便地实现这个功能。

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读取excel代码实例

shell读取excel代码实例

shell读取excel代码实例以Shell读取Excel代码实例在实际工作中,我们经常会遇到需要读取Excel文件的情况,尤其是在数据处理和分析方面。

本文将介绍如何使用Shell脚本来读取Excel文件的内容,并提供一些代码实例。

一、安装依赖工具要在Shell脚本中读取Excel文件,我们需要安装一些依赖工具。

在Ubuntu系统下,可以使用以下命令来安装:```shellsudo apt-get install gnumeric```二、使用Shell脚本读取Excel文件1. 导出Excel文件为CSV格式我们需要将Excel文件导出为CSV格式,以便在Shell脚本中进行处理。

可以通过以下步骤来导出Excel文件:- 打开Excel文件,选择需要导出的工作表;- 点击“文件” -> “另存为” -> “CSV(逗号分隔)”;- 选择保存路径并点击“保存”。

2. 编写Shell脚本接下来,我们可以编写Shell脚本来读取CSV文件中的数据。

下面是一个简单的示例:```shell#!/bin/bash# 定义CSV文件路径csv_file="data.csv"# 读取CSV文件内容while IFS=',' read -r col1 col2 col3do# 输出每一列的内容echo "列1: $col1"echo "列2: $col2"echo "列3: $col3"done < "$csv_file"```在上述代码中,我们首先定义了CSV文件的路径,然后使用`while`循环逐行读取CSV文件的内容。

通过`IFS=','`设置列分隔符为逗号,然后将每一列的值赋给对应的变量(例如`col1`、`col2`、`col3`),最后输出每一列的内容。

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脚本判断文件后缀的方法实例

使用shell脚本判断文件后缀的方法实例

使⽤shell脚本判断⽂件后缀的⽅法实例⽬录shell脚本判断⽂件后缀附shell提取⽂件后缀名,并判断其是否为特定字符串总结shell脚本判断⽂件后缀有时候需要判断⽂件名后缀来区分⽂件类型,进⽽进⾏不同的操作。

以下是获取⽂件名后缀和⽂件名前缀的两个函数,由于shell脚本函数只能返回0-255,为了将结果返回,就直接使⽤echo输出,可以⽤$()进⾏捕获。

#!/bin/bash# --------------------------------------------------------------------------- ## 获取⽂件名后缀# Parameter1: ⽂件名# output: Yes# return: None# --------------------------------------------------------------------------- #function FileSuffix() {local filename="$1"if [ -n "$filename" ]; thenecho "${filename##*.}"fi}# --------------------------------------------------------------------------- ## 获取⽂件名前缀# Parameter1: ⽂件名# output: Yes# return: None# --------------------------------------------------------------------------- #function FilePrefix() {local filename="$1"if [ -n "$filename" ]; thenecho "${filename%.*}"fi}使⽤⽰例:# --------------------------------------------------------------------------- ## 判断⽂件后缀是否是指定后缀# Parameter1: ⽂件名# parameter2: 后缀名# output: None# return: 0: 表⽰⽂件后缀是指定后缀;1: 表⽰⽂件后缀不是指定后缀# --------------------------------------------------------------------------- #function IsSuffix() {local filename="$1"local suffix="$2"if [ "$(FileSuffix ${filename})" = "$suffix" ]; thenreturn 0elsereturn 1fi}file="demo.txt"IsSuffix ${file} "txt"ret=$?if [ $ret -eq 0 ]; thenecho "the suffix of the ${file} is txt"fi附shell提取⽂件后缀名,并判断其是否为特定字符串如果⽂件是 .css⽂件或 .js⽂件,则进⾏处理。

shell if语句案例

shell if语句案例

shell if语句案例摘要:1.Shell if 语句概述2.Shell if 语句案例一:判断文件是否存在3.Shell if 语句案例二:判断文件是否可读4.Shell if 语句案例三:判断目录是否存在5.Shell if 语句案例四:综合案例正文:【Shell if 语句概述】在Shell 脚本编程中,if 语句是一种条件判断语句,可以根据指定的条件执行相应的操作。

if 语句的基本语法结构如下:```if 条件; then操作elif 条件; then操作else操作fi```【Shell if 语句案例一:判断文件是否存在】在Shell 脚本中,我们可以使用if 语句判断一个文件是否存在。

下面是一个示例:```bash#!/bin/bashfile="example.txt"if [ -f "$file" ]; thenecho "文件存在"elseecho "文件不存在"fi```【Shell if 语句案例二:判断文件是否可读】我们还可以使用if 语句判断一个文件是否可读。

以下是一个示例:```bash#!/bin/bashfile="example.txt"if [ -r "$file" ]; thenecho "文件可读"elseecho "文件不可读"fi```【Shell if 语句案例三:判断目录是否存在】同样地,我们也可以使用if 语句判断一个目录是否存在。

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编程题经典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```。

shell脚本练习题

shell脚本练习题

shell脚本例子集锦(习题总结)练习一:写一个脚本1.设定变量FILE的值为/etc/passwd2.依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么形如:(提示:LINE=`wc -l /etc/passwd | cut -d" " -f1`)Hello,root,your UID is 0.3.统计一个有多少个用户答案一:#!/bin/bashfile="/etc/passwd"LINES=`wc -l $file | cut -d" " -f1`for I in `seq 1 $LINES`;douserid=`head -$I $file | tail -1 |cut -d: -f3`username=`head -$I $file | tail -1 |cut -d: -f1`echo "hello $username,your UID is $userid"doneecho "there are $LINES users"答案二:#!/bin/bashfile=/etc/passwdlet num=0for I in `cat $file`;dousername=`echo "$I" | cut -d: -f1`userid=`echo "$I" | cut -d: -f3`echo "Hello,$username,your UID is $userid"num=$[$num+1]doneecho "there are $num users"练习二:写一个脚本1.切换工作目录至/var2.依次向/var目录中的每个文件或子目录问好,形如:(提示:for FILE in /var/*;或for FILE in `ls /var`;)Hello,log3.统计/var目录下共有多个文件,并显示出来答案:#!/bin/bashcd /varlet num=0for I in `ls /var/*`;doecho "hello $I"num=$[$num+1]doneecho "the number of files is $num"练习三:写一个脚本1.设定变量file的值为/etc/passwd2.使用循环读取文件/etc/passwd的第2,4,6,10,13,15行,并显示其内容3.把这些行保存至/tmp/mypasswd文件中答案:#!/bin/bashfile="/etc/passwd"for I in 2 4 6 10 13 15;doexec 3>/tmp/mypasswdline=`head -$I $file | tail -1`echo "$line"echo "$line" >&3exec 3>&-done练习四:写一个脚本传递两个整数给脚本,让脚本分别计算并显示这两个整数的和,差,积,商答案如下:vim test.sh#!/bin/bashecho "first number $1" (表示输出第一个数)echo "second number $2" (表示输出第二个数)echo "$(($1+$2))" (输出两数之和)echo"$[$1-$2]" (输出两数之差)echo"$[$1*$2]" (输出两数之积)echo"$[$1/$2]" (输出两数之商):wq(表示保存并退出vi编辑器)chmod +xtest.sh (给test.sh执行的权限)./test.sh 23 (传递两个参数并执行脚本作业一:写一个脚本:1.创建目录/tmp/scripts2.切换工作目录至此目录中3.复制/etc/pam.d目录至当前目录,并重命名为test4.将当前目录的test及其里面的文件和子目录的属主改为redhat5.将test及其子目录中的文件的其它用户的权限改为没有任何权限答案:#!/bin/bashmkdir -v /tmp/scriptscd /tmp/scriptscp -r /etc/pam.d ./testchown -R redhat ./testchmod -R o=--- ./test作业二:写一个脚本1.显示当前系统日期和时间,而后创建目录/tmp/lstest2.切换工作目录至/tmp/lstest3.创建目录a1d,b56e,6test4.创建空文件xy,x2y,7325.列出当前目录下以a,x或者6开头的文件或目录6.列出当前目录下以字母开头,后跟一个任意数字,而后跟任意长度字符的文件或目录答案:#!/bin/bashdatemkdir -pv /tmp/lstestcd /tmp/lstestmkdir a1d b56e 6testtouch xy x2y 732ls [ax6]*ls [[:alpha:]][[:digit:]]*作业三:写一个脚本添加10个用户user1到user10,但要求只有用户不存在的情况下才能添加答案:#!/bin/bashfor I in `seq 1 10`;docut -d: -f1 /etc/passwd |grep "user$I" 2>>/tmp/etc.err || useradd user$Idone作业四:写一个脚本通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线如果在线,就显示“ip is up”如果不在线,就显示“ip is down”答案: #!/bin/bashfor I in `seq 151 254`;doping -c1 -w1 192.168.0.$I &>/dev/null && echo "192.168.0.$I is up" || echo "192.168.0.$I is down"done例题:shell1.sh 显示日期和时间。

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脚本去重的⼏种⽅法实例测试⽂件复制代码代码如下:[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是结束列。

shell在指定目录下批量执行sql脚本的实例

shell在指定目录下批量执行sql脚本的实例

shell在指定⽬录下批量执⾏sql脚本的实例如下所⽰:#!/bin/bash#execute all script in specified directoryMYDATE=`date +%F'-'%T'-'%w`MYSQL_PATH=/tmp/scripts #指定的⽬录LOG_FILE=/tmp/scripts/exec_${MYDATE}.logconfirm=db_name=db_pass=for file in ${MYSQL_PATH}/*doif [ -f "$file" ] ; thenpostfix=`echo $file | awk -F'.' '{print "."$NF}'`if [ $postfix = ".sql" ] ; thenif [ ! $db_name ] ; then #如果没有指定数据库read -p "请输⼊数据库名:" db_nameread -p "你输⼊的数据名是【$db_name】,确认继续请输⼊--yes--: " confirmfiif [ "$confirm" = "yes" ] && [ -n $confirm ] ; thenif [ ! $db_pass ] ; then #如果没有设置密码stty -echo #密码输⼊保护关闭显⽰read -p "请输⼊数据库密码:" db_passecho -e "\n"stty echofimysql -uroot -p$db_pass -P3306 --default-character-set=utf8 ${db_name} < $file >& error.logecho $fileecho -e "\n===========$file=============\n" >>${LOG_FILE}cat error.log >>${LOG_FILE} #输出执⾏⽇志error=`grep ERROR error.log` #读取错误⽇志信息if [ -n "$error" ] ; then #如果有错误就退出程序echo $errorexitfielseecho "您已经取消操作!"exitfififidone以上这篇shell在指定⽬录下批量执⾏sql脚本的实例就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
# #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."
((i=i+1)) if [ $i -eq 4 ] then
echo "this time i is equal to 4" continue fi echo "this time i is not equal to 4" done echo "The command is $0" echo "The first argument is $1, the second argument is $2" echo "The entire command is $0 $1 $2" echo "And there are $# arguments" echo "The end of testing"
fi #clear #:trap "" 2 18 20 24 #e cho "***********************************************************************" #e cho " HI! You changed my root password" #e cho " This is a little punishment for you then you can use the shell" #e cho " You must answer my three questions and type "yes" or "no" to answer"
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
#break
done
# !/bin/bash
# list a content summary of a number of RPM packages
# USAGE: showrpm rpmfile1 rpmfile2 ...
# EXAMPLE: showrpm /cdrom/Thizlinux/RPMS/*.rpm
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
则循环刚才的过程,否则退出。
#!/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."
if [ "$var" = "end" ]
then
break
fi
echo "var is $var"
done
3. 写一个脚本,利用循环和 continue 关键字,计算 100 以内能被 3 整除的数之和
4.一个函数,利用 shift 计算所有参数乘积,假设参数均为整数
#! /bin/sh
result=1
for rpmpackage in $*;
do
if [ -r "$rpmpackage" ];
then
echo "=============== $rpmpackage =============="
/bin/rpm -qip $rpmpackage
else
echo "ERROR: cannot read file $rpmpackage"
#! /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
echo "var is $var"
done
//////////////////////////////////////////
#!/bin/sh
unset var
while [ "$var" != "end" ]
do
echo -n "please input a number: "
read var
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:",要求用户输入数值,然后打
while [ $# -gt 0 ]
do
result=`expr $result * $1`
shift
done
echo $result
5.写一个脚本,可以根据参数文件名,以正确的参数调用 tar 来解压缩 tar.gz 或 tar.bz2 文件。
相关文档
最新文档