常用shell脚本

合集下载

powershell日常操作服务器脚本(1)

powershell日常操作服务器脚本(1)

powershell⽇常操作服务器脚本(1)由于⽇常接触服务器和APP运维⼯作较多,估整理⼀些⽇常使⽤powershell 脚本来操作服务器的⼀些⽅法:脚本如下:# 重启IISfunction Action-IIS-Restart{param(#输⼊参数[Paramter(Mandatory=$true)][string]$password,[evntype]$evn)#password 转换$password_conv =ConvertTo-SecureString -String#需要重启IIS的服务器列表$servers= 'server1','server2'#登陆凭证对应⽤户信息$username='username'#创建登陆凭证$credential =New-Object System.Management.Automation.PSCredential -argumentlist $username ,$password_convwrite-output '正在重启 IIS 服务 ................ '#循环遍历需要重启IIS服务器foreach($server in$servers){$message= '正在重启 IIS 服务,服务器 : '+$serverwrite-output $message$sessions=New-PSSession -ComputerName $server -credential $credentialInvoke-Command –Session $sessions -scriptBlock {restart-Service w3svc}$message= 'IIS 服务已重启,服务器 : '+$serverwrite-output $message}write-output 'IIS 服务已全部重启 ...................'}#重启服务器function Action-Restart-Server{param([Paramter(Mandatory=$true)][string]$password)$username='username' #推荐使⽤G-account ,且该账号需要有admin权限$servers='server1','server2'#需要重启的服务器列表$password_conv =ConvertTo-SecureString -String $password -AsPlainText -Force#创建凭证$credential =New-Object System.Management.Automation.PSCredential -argumentlist $username ,$password_conv#重启命令write-output '开始重启服务器......'Restart-Computer -ComputerName $servers -Credential $credential -Wait -For PowerShell -InformationActionwrite-output '服务器重启完成......'}#获取服务上IIS pool的状态function IIS_Status_Check{#获取应⽤程序池状态Import-Module WebAdministration; Get-WebAppPoolState -Name 'DefaultAppPool'#开启应⽤程序池Import-Module WebAdministration; Start-WebAppPool -Name 'DefaultAppPool'#关闭应⽤程序池Import-Module WebAdministration; Stop-WebAppPool -Name 'DefaultAppPool'#获取站点状态Import-Module WebAdministration; Get-WebsiteState -Name "Default Web Site"}View Code--待续--。

Shell脚本中的日期和时间处理技巧

Shell脚本中的日期和时间处理技巧

Shell脚本中的日期和时间处理技巧在Shell脚本中,日期和时间的处理是经常会使用到的一个功能。

本文将介绍一些常用的Shell脚本中日期和时间处理的技巧,帮助读者更好地处理日期和时间相关的问题。

一、获取当前日期和时间在Shell脚本中,获取当前日期和时间是很常见的需求。

可以使用date命令来获取当前的日期和时间。

下面是一个示例代码:```#!/bin/bashcurrent_date=$(date +%F)current_time=$(date +%T)echo "当前日期:$current_date"echo "当前时间:$current_time"```上述代码中,使用date命令的+%F参数获取当前日期,+%T参数获取当前时间。

通过将获取到的日期和时间赋值给变量,我们可以在脚本中进行进一步的处理和输出。

二、格式化日期和时间在实际的脚本中,可能需要将日期和时间按照一定的格式进行输出。

可以使用date命令的-d参数来指定输入的日期和时间,并结合+%格式参数来格式化输出。

下面是一个示例代码,将指定的日期和时间格式化为"YYYY-MM-DD HH:MM:SS"的格式:```#!/bin/bashformatted_date=$(date -d "2021-01-01 12:34:56" +%F)formatted_time=$(date -d "12:34:56" +%T)echo "格式化后的日期:$formatted_date"echo "格式化后的时间:$formatted_time"```在上述代码中,使用date命令的-d参数指定输入的日期和时间,后面的+%F和+%T参数分别表示格式化为日期和时间的格式。

三、计算日期和时间差有时候我们需要计算两个日期或时间之间的差值。

经典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脚本常用命令

shell脚本常用命令

shell脚本常⽤命令shell基本命令1.#!/bin/sh是指此脚本使⽤/bin/sh来解释执⾏。

解释:#! 是⼀个约定的标记,它告诉系统这个脚本需要什么解释器来执⾏,即使⽤哪⼀种 Shell。

2.echo 命令⽤于向窗⼝输出⽂本。

举例:echo "Hello World !"3.your_name="qinjx"赋值变量echo ${your_name}打印变量;使⽤变量的时候加括号和美元符4.chmod +x ./test.sh #使脚本具有执⾏权限./test.sh #执⾏脚本chmod 777 /tmp -R 意思是把tmp⽂件夹及其⼦bai⽂件夹的权限全部修改为777解释语句⼀:ping -c 5 > /dev/null 2>&11. ping -c 5 -c<完成次数>:设置完成要求回应的次数;2. >/dev/null这条命令的作⽤是将标准输出1重定向到/dev/null中。

/dev/null代表linux的空设备⽂件,所有往这个⽂件⾥⾯写⼊的内容都会丢失,俗称“⿊洞”。

那么执⾏了>/dev/null之后,标准输出就会不再存在,没有任何地⽅能够找到输出的内容。

3. 2>&1这条命令⽤到了重定向绑定,采⽤&可以将两个输出绑定在⼀起。

这条命令的作⽤是错误输出将和标准输出同⽤⼀个⽂件描述符,说⼈话就是错误输出将会和标准输出输出到同⼀个地⽅。

linux在执⾏shell命令之前,就会确定好所有的输⼊输出位置,并且从左到右依次执⾏重定向的命令,所以>/dev/null 2>&1的作⽤就是让标准输出重定向到/dev/null中(丢弃标准输出),然后错误输出由于重⽤了标准输出的描述符,所以错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了。

执⾏了这条命令之后,该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到⽂件中。

常用shell脚本指令

常用shell脚本指令

常用shell脚本命令1、显示包含文字aaa的下一行的内容:sed -n '/aaa/{n;p;}' filename2、删除当前行与下一行的内容:sed -i '/aaa/{N;d;}' filename3、删除当前行与下两行的内容:sed -i '/aaa/{N;N;d;}' filename依次类推,删除三行,则为{N;N;N;d;},分析知:N为next4、得出以空格为分割的字符串中单词的个数,即统计个数:awk ' { print NF } '如显示字符串VALUE中的单词个数,其中VALUE为:aaa bbb ccc ddd ee f则执行 echo $VALUE | awk ' { print NF } ' 后的结果为65、在linux中建立一个文件与另一文件的链接,即符号链接ln -s /var/named/chroot/etc/named.conf named.conf这要就建立了当前目录的文件named.conf对/var/named/chroot/etc/named.conf 的符号链接。

即操作named.conf就意味着操作实际文件/var/named/chroot/etc/named.conf ,这时用ll命令查看的结果如:lrwxrwxrwx 1 root root 32 Mar 22 12:29 named.conf ->/var/named/chroot/etc/named.conf注意:当用sed来通过named.conf来删除一部分信息时,会将符号链接的关系丢掉,即会将named.conf变成一个实际文件。

所以需对实际文件进行删除操作。

6、显示指定字符范围内的内容:如:显示文件test.txt中字符#test begin与#test end之间所有的字符sed -n "/#test begin/,/#test end/p" test.txt或 awk "/#test begin/,/#test end/" test.txt在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则.1. 单引号和双引号的区别单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符,不会作变量的引用,直接输出字符窜。

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以内的随机数,提⽰⽤户猜数字,提⽰⽤户猜⼤了、猜⼩了、猜对了,直⾄⽤户猜对,脚本结束。

5个实用的shell脚本面试题和答案

5个实用的shell脚本面试题和答案

5个实⽤的shell脚本⾯试题和答案这边提到的5个⾯试问题,延续之前的有关Linux⾯试问题和答案。

如果你是Tecmint的读者,你的⽀持我⾮常感谢。

1. 写⼀个shell脚本来得到当前的⽇期,时间,⽤户名和当前⼯作⽬录。

答案 : 输出⽤户名,当前⽇期和时间,以及当前⼯作⽬录的命令就是logname,date,who i am和pwd。

现在,创建⼀个名为userstats.sh⽂件,将下⾯的代码添加到它。

复制代码代码如下:#!/bin/bashecho "Hello, $LOGNAME"echo "Current date is `date`"echo "User is `who i am`"echo "Current directory `pwd`"给它添加执⾏权限,并且执⾏他。

复制代码代码如下:# chmod 755 userstats.sh# ./userstats.sh样例输出复制代码代码如下:Hello, aviCurrent date is Sat Jun 7 13:05:29 IST 2014User is avi pts/0 2014-06-07 11:59 (:0)Current directory /home/avi/Desktop2.写⼀个shell脚本,进⾏两个数字的相加,如果没有输⼊参数就输出错误信息和⼀⾏使⽤说明答案 : 下⾯是简单的shell脚本以及描述,如果没有命令⾏参数,它会抛出错误与如何使⽤脚本的说明。

再创建⼀个名为twonumbers.sh⽂件和下⾯的内容添加到⽂件⾥。

复制代码代码如下:#!/bin/bash# The Shebangif [ $# -ne 2 ]# If two Inputs are not received from Standard Inputthen# then execute the below statementsecho "Usage - $0 x y"# print on standard output, how-to use the script (Usage - ./1.sh x y )echo " Where x and y are two nos for which I will print sum"# print on standard output, “Where x and y are two nos for which I will print sum ”exit 1# Leave shell in Error Stage and before the task was successfully carried out.fi# End of the if Statement.echo "Sum of $1 and $2 is `expr $1 + $2`"# If the above condition was false and user Entered two numbers as a command Line Argument,it will show the sum of the entered numbers.给他添加可执⾏权限,并且执⾏。

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

如何用脚本实现分割文件#!/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 " 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'如何查找日期为某一天的文件#!/bin/sh# The right of usage, distribution and modification is here by granted by the author.# The author deny any responsibilities and liabilities related to the code. #OK=0A=`find $1 -print`if expr $3 == 1 >;/dev/null ; then M=Jan ; OK=1 ; fiif expr $3 == 2 >;/dev/null ; then M=Feb ; OK=1 ; fiif expr $3 == 3 >;/dev/null ; then M=Mar ; OK=1 ; fiif expr $3 == 4 >;/dev/null ; then M=Apr ; OK=1 ; fiif expr $3 == 5 >;/dev/null ; then M=May ; OK=1 ; fiif expr $3 == 6 >;/dev/null ; then M=Jun ; OK=1 ; fiif expr $3 == 7 >;/dev/null ; then M=Jul ; OK=1 ; fiif expr $3 == 8 >;/dev/null ; then M=Aug ; OK=1 ; fiif expr $3 == 9 >;/dev/null ; then M=Sep ; OK=1 ; fiif expr $3 == 10 >;/dev/null ; then M=Oct ; OK=1 ; fiif expr $3 == 11 >;/dev/null ; then M=Nov ; OK=1 ; fiif expr $3 == 12 >;/dev/null ; then M=Dec ; OK=1 ; fiif expr $3 == 1 >;/dev/null ; then M=Jan ; OK=1 ; fiif expr $OK == 1 >; /dev/null ; thenls -l --full-time $A 2>;/dev/null | grep "$M $4" | grep $2 ;elseecho Usage: $0 path Year Month Day;echo Example: $0 ~ 1998 6 30;fi如何计算当前目录下的文件数和目录数# ls -l * |grep "^-"|wc -l ---- to count files# ls -l * |grep "^d"|wc -l ----- to count dir如何只列子目录?ls -F | grep /$ 或者 alias sub = "ls -F | grep /$"(linux)ls -l | grep "^d" 或者 ls -lL | grep "^d" (Solaris)如何实现取出文件中特定的行内容如果你只想看文件的前5行,可以使用head命令,如: head -5 /etc/passwd如果你想查看文件的后10行,可以使用tail命令,你知道怎么查看文件中间一段吗?你可以使用sed命令如: sed -n '5,10p' /etc/passwd 这样你就可以只查看文件的第5行到第10行。

如何查找含特定字符串的文件例如查找当前目录下含有"the string you want find..."字符串的文件:$find . -type f -exec grep “the string you want find...” {} ; -print如何列出目录树下面的短小的shell程序可以列出目录树, 充分利用了sed强大的模式匹配能力.目录树形式如下:.`----shellp`----updates`----wu-ftpd-2.4| `----doc| | `----examples| `----src| | `----config| | `----makefiles| `----support| | `----makefiles| | `----man| `----util脚本如下:#!/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"如何实现取出文件中特定的列内容我们经常会遇到需要取出分字段的文件的某些特定字段,例如/etc/password就是通过“:”分隔各个字段的。

可以通过cut命令来实现。

例如,我们希望将系统账号名保存到特定的文件,就可以:cut -d: -f 1 /etc/passwd >; /tmp/users-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段。

当然也可以通过cut取得文件中每行中特定的几个字符,例如:cut -c3-5 /etc/passwd就是输出/etc/passwd文件中每行的第三到第五个字符。

-c 和-f 参数可以跟以下子参数:N 第N个字符或字段N- 从第一个字符或字段到文件结束N-M 从第N个到第M个字符或字段-M 从第一个到第N个字符或字段在vim中实现批量加密============================================================#!/bin/bash# Encrypt file with vimif (test $# -lt 2) thenecho Usage: decrypt password filenameelsevim -e -s -c ":set key=$1" -c ':wq' $2echo "$2 encrypted."fi============================================================[weeder@SMTH weeder]$ for file in *.txt ; do encrypt test $file ; donetest2.txt encrypted.test4.txt encrypted.test9.txt encrypted.kick.txt encrypted.echo "$2 encrypted."fi[weeder@SMTH weeder]$ for file in *.txt ; do encrypt test $file ; donetest2.txt encrypted.test4.txt encrypted.test9.txt encrypted.kick.txt encrypted.too_old.txt encrypted.too_old_again.txt encrypted.bg5.txt encrypted.[weeder@SMTH weeder]$$@等特定shell变量的含义在shell脚本的实际编写中,有一些特殊的变量十分有用:$# 传递到脚本的参数个数$* 以一个单字符串显示所有向脚本传递的参数。

相关文档
最新文档