1、环境
系统:Centos6.6 x64
shell:bash、shshell
[centos@Shell ~]$ hostname Shell [centos@Shell ~]$ lsb_release -a LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch Distributor ID: CentOS Description: CentOS release 6.6 (Final) Release: 6.6 Codename: Final [centos@Shell ~]$ echo $SHELL /bin/bash [centos@Shell ~]$ ifconfig eth0 |grep "t addr"| awk -F '[: ]+' '{print $4}' 192.168.101.110
2、脚本示例
一、终端打印centos
#!/bin/bash #The printf of Linux termnal,Include "echo,printf" #author by woon echo "The shell\`s name is $0" #examples of echo,printf #默认打印。输出换行 echo "Hello World!" echo 'Hello World!' #echo -n参数接受不换行输出 echo -n "Hello World" echo "Hello World" #-e参数接受双引号内字符串的转移列表 echo "Hello\tWorld!" echo -e "Hello\tWorld!" #printf使用文本或由空格分割的参数,可指定输出的宽度、对其方式等,能够格式化输出,默认状况下,printf不输出换行 printf "%-5s %-10s %-4s\n" No. NAME Mark printf "%-5s %-10s %-4s\n" 1 Lee 80 printf "%-5s %-10s %-4.2f\n" 2 Woon 90.456 printf "%-5s %-10s %-4.2f\n" 3 James 85.654321 printf "%-5s %-10s %-5.3f\n" 4 Jeff 85.123789
运行结果:bash
The shell`s name is shell_print.sh Hello World! Hello World! Hello WorldHello World Hello World! -e Hello World! No. NAME Mark 1 Lee 80 2 Woon 90.46 3 James 85.65 4 Jeff 85.124
二、环境变量ide
#!/bin/bash #author by woon #env#获取全局环境变量 env > /tmp/env_$(date +%Y%m%d).$$ head -n 10 /tmp/env_$(date +%Y%m%d).$$ echo "^^^^^^^^^^^^^^^^^分隔符^^^^^^^^^^^^^^^^^^^^^^" #获取单个全局变量的值 echo $PATH echo "^^^^^^^^^^^^^^^^^分隔符^^^^^^^^^^^^^^^^^^^^^^" #自定义变量和自定义全局变量,删除环境变量 var="Hello World" echo -n "$var" echo -n $var echo ${var} #设置全局环境变量 export VAR #获取当前的shell版本 echo $SHELL #or echo $0 #获取变量的长度 var="Hello World" echo ${#var} #变量内容的删除 path=$PATH echo $path echo "最短删除,非贪婪模式,由前向后删除" var1=${path#/*:} echo $var1 echo "贪婪模式,删除匹配到最长的,由前向后删除" var2=${path##/*:} echo $var2 echo "非贪婪模式%,由后向前删除" var3=${path%:*bin} echo $var3 echo "贪婪模式,由后向前删除最长的" var4=${path%%:*bin} echo $var4
三、shell数学运算ui
#!/bin/bash #author by woon. #数学运算 sum_jia=0 sum_cheng=1 i=1 while [ $i -le 10 ]; do let "sum_jia+=i" let "sum_cheng*=i" let "i += 2" done sum_jian1=$[ sum_cheng - sum_jia] sum_jian2=$(( sum_cheng - sum_jia )) echo $sum_jia echo $sum_cheng echo $sum_jian1 echo $sum_jian2
运行结果
$ ./shell_num.sh
25
945
920
920日志
四、文件查找和文件列表几操做code
#!/bin/bash #author by woon #find 能够基于名字、类型、时间、大小、目录深度、大小权限、用户等查找并执行动做 #example sudo find /etc/ -iregex ".*\(\.py\|\.sh\)" -type f -atime -1 -user root -size -2k -perm 644 -print #sudo find /etc/ -iregex ".*\(\.py\|\.sh\)" -type f -atime -1 -user root -size -2k -perm 644 -delete sudo find /etc/ -iregex ".*\(\.py\|\.sh\)" -type f -atime -1 -user root -size -2k -perm 644 -exec ll {} \; sudo find /etc/ -iregex ".*\(\.py\|\.sh\)" -type f -atime -1 -user root -size -2k -perm 644 -print0 | xargs -0 ls -l
五、tr转换
tr参数属于集合映射关系
tr删除ip
[centos@Shell scripts]$ uuidgen | tr -d [a-z] 37643-2050-48-25-547825
tr替换
本替换其实值将0-a、1-b …… 9-j的映射关系替换md5
[centos@Shell scripts]$ echo | md5sum |tr [0-9] [a-z] gibdcjdajijdedeajjchdiadfcbjcjea -
六、校验和核实
md5sum字符串
[centos@Shell scripts]$ ls dialog_t.md5 os_monitor-dialog.sh shell_print.sh test.sh dialog_t.sh pcpu_usage.sh shell_search.sh top10_commands.sh inpath shell_num.sh shell_varable.sh [centos@Shell scripts]$ md5sum os_monitor-dialog.sh >os_monitor-dialog.md5 [centos@Shell scripts]$ md5sum -c os_monitor-dialog.md5 os_monitor-dialog.sh: 肯定
脚本示例
#!/bin/bash #为/etc/passwd生成一个MD5并校验,在生成MD5前检查/etc/passwd文件是否已经被排过序 sort -C /etc/passwd if [ $? -eq 0 ]; then echo "Sorted" else echo "Unsorted!" md5sum /etc/passwd > passwd.md5 fi md5sum -c passwd.md5
七、生成随机数
$RANDOM生成一个随机数;date +%s%N获取随机数字字符串
脚本以下:
#!/bin/bash #建立example目录,在该目录下批量生成10个日志文件,日志文件名包含10个随机小写字母和固定字符串example;当前用户不具备权限,须要设置权限 if [ ! -d /example ]; then echo "centos"|sudo -S mkdir /example echo "centos" | sudo -S chown centos:centos /example -R fi #产生随机数$RANDOM,或uuidgen命令或者用MD5sum,而后替换 for num in $(seq 1 10) do touch /example/$(echo $RANDOM | md5sum |tr "0-9" "a-z"|cut -c 1-10)_example.log done
八、根据扩展名切分文件名
#!/bin/bash #shell name:shell_split.sh #切分文件名并批量重命名或移动,好比图形文件等 num=1; for img in *.jpg *.img do mv $img image-$num.{img##*.} 2>/dev/null if [ $? -eq 0 ]; then echo "Rename $img to image-$num.${img##*.}" let num++ fi done
九、列举文件类型统计信息
给出一个路径,统计该路径下各文件类型的数量
#!/bin/bash #shell name:shell_filestat.sh #列举文件类型数量 if [ $# -ne 1 ]; then echo -e "$0 path\nexample:$0 /etc/" else path=$1 declare -A array; while read line; do #echo $(file -b $line) ftype=$(file -b $line) let array["$ftype"]++; done< <(find $path -type f -print) fi echo ========== File types and counts =========== for ftype in "${!array[@]}" do echo $ftype : ${array["$ftype"]} done
十、判断当前系统是否支持该命令
#!/bin/sh in_path() { cmd=$1 path=$2 retval=1 oldIFS=$IFS IFS=":" for directory in $path do if [ -x $directory/$cmd ] ; then retval=0 fi done IFS=$oldIFS return $retval } checkForCmdInPath() { var=$1 if [ "$var" != "" ] ; then if [ "${var%${var#?}}" = "/" ] ; then if [ ! -x $var ] ; then return 1 fi elif ! in_path $var $PATH ; then return 2 fi fi } if [ $# -ne 1 ] ; then echo "Usage: $0 command" >&2 ; exit 1 fi checkForCmdInPath "$1" case $? in 0 ) echo "$1 found in PATH" ;; 1 ) echo "$1 not found or not executable" ;; 2 ) echo "$1 not found in PATH" ;; esac exit 0