设为首页 收藏本站
查看: 855|回复: 0

[经验分享] Linux shell 示例(一)

[复制链接]

尚未签到

发表于 2019-2-17 14:09:58 | 显示全部楼层 |阅读模式
  一、环境
系统:Centos6.6  x64
shell:bash、sh

[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

  二、脚本示例
1、终端打印

#!/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

  运行结果:

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

  2、环境变量

#!/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
  3、shell数学运算

#!/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
  4、文件查找和文件列表几操作

#!/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
  5、tr转换
tr参数属于集合映射关系
tr删除

[centos@Shell scripts]$ uuidgen | tr -d [a-z]
37643-2050-48-25-547825
  tr替换
本替换其实值将0-a、1-b …… 9-j的映射关系替换

[centos@Shell scripts]$ echo | md5sum |tr [0-9] [a-z]
gibdcjdajijdedeajjchdiadfcbjcjea  -
  6、校验和核实
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

  7、生成随机数
$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
  8、根据扩展名切分文件名

#!/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
  9、列举文件类型统计信息
给出一个路径,统计该路径下各文件类型的数量

#!/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< &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




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-673632-1-1.html 上篇帖子: Linux基本介绍 下篇帖子: day 6 Linux命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表