练习脚本和一些可用脚本更新中...

零碎知识点

  • 开启一个脚本相当于开启一个子进程,变量不会继承
  • 注意()里面也会开启子进程,变量不会继承,如果想要作为一个整体要用{}。
  • 但是注意exit的返回值即使在()里面,但如果它是最后一个命令执行过后产生的,没有再赋予新值,则它在当前的shell中仍然可以继承判断。就如同之前的 echo $name;(echo $name;) ,只要小括号内没有赋值,则两个name显示的结果一样,小括号和直接输入bash开启子进程仍然略有不同。

.vimrc设置,它要放在 ~/内

~/.vimrc

set ignorecase
set cursorline
set autoindent
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
        if expand("%:e") == 'sh'
        call setline(1,"#!/bin/bash") 
        call setline(2,"#") 
        call setline(3,"#********************************************************************") 
        call setline(4,"#Author:                ZhangYinsheng") 
        call setline(5,"#QQ:                    744004845") 
        call setline(6,"#Date:                  ".strftime("%Y-%m-%d"))
        call setline(7,"#FileName:             ".expand("%"))
        call setline(8,"#URL:                   https://blog.51cto.com/14228129.")
        call setline(9,"#Description:          The test script")                                                        
        call setline(10,"#Copyright (C):        ".strftime("%Y")." All rights reserved")
        call setline(11,"#********************************************************************") 
        call setline(12,"") 
        endif
endfunc
autocmd BufNewFile * normal G

判断centos版本

IDCentos_release_version.sh

#!/bin/bash
case "`cat /etc/redhat-release |grep -Eo " [0-9]{1,2}"|tr -d " " `"  in
        4) 
                echo "Centos version is 4" ;; 
        5)
                echo "Centos version is 5" ;;
        6)
                echo "Centos version is 6" ;;
        7)      
                echo "Centos version is 7" ;;
        8)
                echo "Centos version is 8" ;;
        9)
                echo "Centos version is 9" ;;
        10)
                echo "Centos version is 10" ;;                                              
        esac
  • 去掉数字前方一个或者多个空格有一个简单的方法,就是让一个变量等于它,然后输出的时候不加上引号,就可以了,空格也算在格式里面了。
  • 比如把上面的case后面的长式子赋值给一个变量之后再判断,就不需要用tr命令去除空格了。
  • 但如果是字符中间的多个空格用这种方法会变成一个,不会全部去掉要注意。

报警磁盘和inode编号用量:

#!/bin/bash
Perscent=10  #警告阈值    
Usedisk="`df | grep "/dev/sd"|grep -E " [0-9]+%" -o| tr -d "%" |sort -nr |head -1 `";
InodeUsedisk="`df -i | grep "/dev/sd"|grep -E " [0-9]+%" -o| tr -d "%" |sort -nr |head -1 `";
[ $Usedisk -ge $Perscent ] && echo Warning! Useddisk is ${Usedisk}% ;
[ $InodeUsedisk -ge $Perscent ] && echo Warning! InodeUseddisk is ${InodeUsedisk}% ;
[ $Usedisk -lt $Perscent ] && [ $InodeUsedisk -lt $Perscent ] && echo Disk Using Condition is Good!;

脚本参数引用以及$*,$@,shift判断

agr1.sh agr1 arg2...

#!/bin/bash
echo "1st arg is $1"
echo "2st arg is $2"
echo "2st arg is $3"
echo "10st arg is ${10}"
echo "all args are $*"
echo "all args are $@"
echo "args sumnumber is $#"
echo "scriptname is `basename $0`"
echo -e "\e[1;33marg2 use \$* begins test:\e[0m"
arg2.sh "$*"  #use $*
echo -e "\e[1;33marg3 use \$@ begins test:\e[0m"
arg3.sh "$@"  #use $@

echo -e "\e[1;32mShift once test:\e[0m"
shift
echo "1st arg is $1"
echo "2st arg is $2"
echo "2st arg is $3"
echo "10st arg is ${10}"
echo -e "\e[1;32mShift twice test:\e[0m"
shift
echo "1st arg is $1"
echo "2st arg is $2"
echo "2st arg is $3"
echo "10st arg is ${10}"       

arg2.sh同arg3.sh:

#!/bin/bash
echo "1st arg is $1"
echo "2st arg is $2"
echo "2st arg is $3"
echo "10st arg is ${10}"
echo "all args are "$*""
echo "all args are "$@""
echo "args sumnumber is $#"       
echo "scriptname is `basename $0`"

测试环境变量脚本中传递

father.sh

#!/bin/bash
export name=farther

echo "start farther.sh"
echo "name=$name"
echo "farther pid is $BASHPID"
son.sh

son.sh

#!/bin/bash
echo "starting son.sh "
echo "son.sh pid is $BASHPID"
echo "name=$name"
sleep 100

网络拷贝文件到另一台主机(简单版本)

scpfile.sh arg1 arg2....

#!/bin/bash
scp $*  name@192.168.1.2:/data/scripttest

查看主机的各种信息,包括主机名,IPv4地址,操作系统版本,内核版本, CPU型号,内存⼤⼩,硬盘⼤⼩

SysteminfoCheck.sh

#!/bin/bash

备份文件(手动版本)

backup.sh

#! /bin/bash                                                                                                                   
#SOURCE="/data/script36"
DEST="/data/backup/backupfile_`date "+%F_%T"`" #Destination cp directory
BEGINCOLOR="\e[1;35m"
ENDCOLOR="\e[0m"
NOPASS=0                                       #Used to determine whether All filename are correct and exist, 0 is yes ,1is no.
#ARGNUM=$#
set -u    
                                               #variable is not exist ,then exit
#set -e                      
if [ $# -eq 0 ]; then
        echo -e "\e[1;31mPlease input one or more filename[directory]correctly!!!\e[0m"
        echo -e "\e[1;31mFor example :\e[0m\n\e[1;32mbackup.sh\e[0m /home/zhang/ /dev/zero ..."
        exit
else
        echo -e "\e[1;36mCheck input filename whether exists or not...\e[0m"
        for n in $*;do
                if [[ ! -a "$n" ]];then
                        echo -e "\e[1;31mThere is no file[Dir]\e[0m\e[1;5;41m$n\e[0m";
                        NOPASS=1;
                        #Judge if file exist;
                fi
        done
#exit;  
if [ $NOPASS -eq 1 ] ;then
echo -e "\e[1;5;31mCheck Not Pass ,Please check your input filename and redo!!!\e[0m"
exit
fi
echo -e "\e[1;32mFilename check done,All file exists\e[0m"
fi
#sleep 50
echo -e "\e[1;33mGet Ready For Backup After 10 Seconds...\e[0m"
sleep 0.5
echo -e "\e[1;5;31mYou can press down key \e[0m\e[1;5;34m\"ctrl + c\"\e[0m\e[1;5;31m to stop backup now!\e[0m"
sleep 0.5
echo "Counting down:"
for i in {1000..1};do                         #10seconds to stop backup
        x=$[i/100];
        y=$[i%100];
        if [ $y -lt 10 ]; then
                y="0$y"
        fi      
        let Rdmcolor=$RANDOM%7+31
        echo -ne "\e[1;${Rdmcolor}m\e[K${x}.${y}\e[0m\r";
        sleep 0.01
done
if [[ ! -d "$DEST" ]]; then
        mkdir -p "$DEST";
        echo -e "\e[1;32mMaking Backup_Destination_Directory Successfully!!!\e[0m";
fi
#sleep 0.1
echo -e "${BEGINCOLOR}Starting backup....$ENDCOLOR"   
#sleep 0.1
cp -a -v -u --backup=numbered $* $DEST
echo -e "${BEGINCOLOR}Backup is finished~$ENDCOLOR"
echo -e "\e[1;32mFile backup to Directory '$DEST'\e[0m"
# unset SOURCE DEST BEGINCOLOR ENDCOLOR

每日定时备份文件(自动版本)

  • 可以用软链接指向backup.sh并判断来进行设置,也可重新在写一个脚本

查看当前远程连接到此电脑的主机数的IP地址和个数,并按照从大到小顺序排列。

linkcheck.sh

#!/bin/bash
echo "The Sumnumber and IPAdress Connecting Now:"                                                               
netstat -tan | tr -s " " ":" |cut -d: -f6 |grep -Eo "(([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9][0-9]?|1[0-9]{2}|2[0-4][0-9]|25[0-5])"|sort|uniq -c
  • 附加用法:可以这样写来加入路径
    PATH=/###/###:$PATH
    echo $PATH >> /etc/profile.d/evn.sh

新装linux环境设置(初版)

  • 变量修改要包含PATH ,HISTCONTROL ,HISTFORMAT,HISTSIZE,PS1
  • 要改别名
  • 要改登陆提示信息issue,motd
  • 要改umask控制新建文件的权限等
  • 要配置~/.vimrc
#! /bin/bash

原文地址:https://blog.51cto.com/14228129/2365802

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2280端口映射到公网,发现经常被暴力破解,自己写了个临时封禁ip功能的脚本,实现5分钟内同一个ip登录密码错误10次就封禁这个ip5分钟,并且进行邮件通知使用步骤openwrt为19.07.03版本,其他版本没有测试过安装bashmsmtpopkg
#!/bin/bashcommand1&command2&wait从Shell脚本并行运行多个程序–杨河老李(kviccn.github.io)
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/phpls-ls 2.编辑修改.bash_profile文件(没有.bash_profile文件的情况下回自动创建)sudovim~/.bash_profile在文件的最后输入以下信息,然后保存退出exportPATH="/Applications/MAMP/bin/php/php7.2.20/b
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如zh_CN之类的语言包,进行中文语言包装:apt-getinstalllanguage-pack-zh-hans3、安装好后我们可以进行临时修改:然后添加中文支持: locale-genzh_CN.UTF-8临时修改> export LC_ALL='zh_CN.utf8'> locale永久
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexadecimalbash2#[0~1]0[0~7]0x[0~f]or0X[0~f]perl0b[0~1]0[0~7]0x[0~f]tcl0b[0~1]0o[0~7]0x[0~f]bashdifferentbaserepresntationreference2.StringlengthLanguageStr
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全命令补全方法:yum-yinstallbash-completionsource/usr/share/bash-completion/bash_completionsource<(kubectlcompletionbash)echo"source<(kubectlcompletionbash)">>~/.bashrc 
参考这里启动jar包shell脚本修改过来的#!/bin/bash#默认应用名称defaultAppName='./gadmin'appName=''if[[$1&&$1!=0]]thenappName=$1elseappName=$defaultAppNamefiecho">>>>>>本次重启的应用:$appName<
#一个数字的行#!/bin/bashwhilereadlinedon=`echo$line|sed's/[^0-9]//g'|wc-L`if[$n-eq1]thenecho$linefidone<1.txt#日志切割归档#!/bin/bashcd/data/logslog=1.logmv_log(){[-f$1]&&mv$1$2
#文件增加内容#!/bin/bashn=0cat1.txt|whilereadlinedon=[$n+1]if[$n-eq5]thenecho$lineecho-e"#Thisisatestfile.\n#Testinsertlineintothisfile."elseecho$linefidone#备份/etc目录#
# su - oraclesu: /usr/bin/ksh: No such file or directory根据报错信息:显示无法找到文件 /usr/bin/ksh果然没有该文件,但是发现存在文件/bin/ksh,于是创建了一个软连接,可以规避问题,可以成功切换到用户下,但无法执行系统自带命令。$. .bash_profile-ksh: .: .b
history显示历史指令记录内容,下达历史纪录中的指令主要的使用方法如果你想禁用history,可以将HISTSIZE设置为0:#exportHISTSIZE=0使用HISTIGNORE忽略历史中的特定命令下面的例子,将忽略pwd、ls、ls-ltr等命令:#exportHISTIGNORE=”pwd:ls:ls-ltr:”使用HIS
一.命令历史  1.history环境变量:    HISTSIZE:输出的命令历史条数,如history的记录数    HISTFILESIZE:~/.bash_history保存的命令历史记录数    HISTFILLE:历史记录的文件路径    HISTCONTROL:     ignorespace:忽略以空格开头的命令
之前在网上看到很多师傅们总结的linux反弹shell的一些方法,为了更熟练的去运用这些技术,于是自己花精力查了很多资料去理解这些命令的含义,将研究的成果记录在这里,所谓的反弹shell,指的是我们在自己的机器上开启监听,然后在被攻击者的机器上发送连接请求去连接我们的机器,将被攻击者的she
BashOne-LinersExplained,PartI:Workingwithfileshttps://catonmat.net/bash-one-liners-explained-part-oneBashOne-LinersExplained,PartII:Workingwithstringshttps://catonmat.net/bash-one-liners-explained-part-twoBashOne-LinersExplained,PartII
Shell中变量的作用域:在当前Shell会话中使用,全局变量。在函数内部使用,局部变量。可以在其他Shell会话中使用,环境变量。局部变量:默认情况下函数内的变量也是全局变量#!/bin/bashfunctionfunc(){a=99}funcecho$a输出>>99为了让全局变量变成局部变量
1、多命令顺序执行;  命令1;命令2  多个命令顺序执行,命令之间没有任何逻辑联系&&  命令1&&命令2  逻辑与,当命令1正确执行,才会执行命令2||  命令1||命令2  逻辑或,当命令1执行不正确,才会执行命令2例如:ls;date;cd/home/lsx;pwd;who ddif=输入文件of=输
原博文使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗?首先,这个符号(#!)的名称,叫做"Shebang"或者"Sha-bang"。Linux执行文件时发现这个格式,会把!后的内容提取出来拼接在脚本文件或路径之前,当作实际执行的命令。 Shebang这个符号通常在Unix系统的脚本
1、历史命令history[选项][历史命令保存文件]选项:-c:  清空历史命令-w:  把缓存中的历史命令写入历史命令保存文件 ~/.bash_historyvim/etc/profile中的Histsize可改存储历史命令数量历史命令的调用使用上、下箭头调用以前的历史命令使用“!n”重复执行第n条历史
目录1.Shell脚本规范2.Shell脚本执行3.Shell脚本变量3.1环境变量3.1.1自定义环境变量3.1.2显示与取消环境变量3.1.3环境变量初始化与对应文件的生效顺序3.2普通变量3.2.1定义本地变量3.2.2shell调用变量3.2.3grep调用变量3.2.4awk调用变量3.3
   http://www.voidcn.com/blog/wszzdanm/article/p-6145895.html命令功能:显示登录用户的信息命令格式:常用选项:举例:w显示已经登录的用户及正在进行的操作[root@localhost~]#w 11:22:01up4days,21:22, 3users, loadaverage:0.00,0.00,0.00USER