sh和bash的区别 bash是sh的增强版本,在我们平常实地操作的时候如果sh这个命令不灵了我们应当使用bash。可以看见sh不仅不支持多种命令,而且很多细小的差别。 所以其实我们应该更多的使用bash,也就是./xx.sh,前提是修改权限,chmod a+x xx.sh。 1.创建当天日期的目录 mkdir `date +%Y%m%d`_file 按秒创建:date +%Y%m%d%-I%M%S 创建昨天目录:date -d -1day +%Y%m%d
-d #显示指定时间 -1day # 昨天时间, -2day前天, +1day 明天 +%Y%m%d #获取当前日期格式为202209092.输出信息 标准输出,正常的命令返回结果 不展示标准输出: ls > /dev/null 错误输出,命令错误提示 不展示错误输出:sfsalfslfs 2> /dev/null 不展示所有输出: sldfjslf &> /dev/null 3.怎么把多行信息加到文本里
cat > ifcft-ens32:1 <<-EOF TYPE=ethernet NOBOOT=yes DEVICE=ens32:1 IPADDR=192.168.75.200 NETMASK=255.255.255.0 EOF说明:EFO前加- 自动去掉空格,如果要保持格式不要加-
cat > xxx.sh <<-EFO 内容1 ... 内容2 ... 内容n ... EOF加-效果
cat > /etc/nginx/conf.d/zabbix.conf <<-EOF server { listen 80; server_name localhost; location / { root /usr/share/zabbix; index index.php index.html index.htm; } location ~ \.php$ { root /usr/share/zabbix; fastcgi_pass 127.0.0.1:9000; fastcgi_buffer_size 64k; fastcgi_buffer 32 64k; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } EOF不加-效果
cat > /etc/nginx/conf.d/zabbix.conf <<EOF server { listen 80; server_name localhost; location / { root /usr/share/zabbix; index index.php index.html index.htm; } location ~ \.php$ { root /usr/share/zabbix; fastcgi_pass 127.0.0.1:9000; fastcgi_buffer_size 64k; fastcgi_buffer 32 64k; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } EOF
4.for循环
复制多个文件 for i in `seq 1 10`; do cp 1G.file 1G.file-$i ;done 每秒文件大小, for i in `seq 1 100`;do ls -lh /home/ws1/tb ; sleep 1 ;done > /tmp/log123.txt 5.输出文字颜色 echo -e "\033[32m----------------\033[0m" 6.判断进程是否存在 判断进程是否存在 killall -0 nginx # killall -0 并不会杀死进程
提示:查询Killall命令是否安装,安装:yum install psmisc
#!/bin/bash # 判断nginx进程是否存在,如果不存在则... killall -0 nginx if [ $? -eq 0 ] ; then echo "nginx 服务正常。" else echo "nginx 服务异常。" fi7.脚本开始前判断,不满足则退出脚本。
if [ $# -eq 0 ];then echo -e "\033[32m----------------\033[0m" echo -e "\033[32m usage:{/usr/bin/sh $0 uesrname}\033[0m" exit 7 fi8.判断文件、目录是否存在
#!/bin/bash # 判断文件、目录是否存在 ######################### #判断有文件,则输出“文件存在” if [ -f /root/test.sh ] ; then echo " 文件存在" #找到文件,执行这里。 echo "`date`" #输出命令结果 else echo "不存在" # 没找到,执行这里。 fi #判断目录是否存在 if [ -d /root/1 ] ;then echo " 目录存在" #找到目录,执行这里。 else echo "不存在" #没找到,执行这里。 fi9.获取top信息 top -n 1 #显示后退出 top -b #以文本方式显示 top -bn 1 #n要写在后面 10.输出纯数字(磁盘使用率) 方法一(awk取整)
[root@v1 ~]# df -h | awk '{print int($5)}' 0 6 0 0方法二(sed)
df -h | awk 'NR>1 {print $5}' |sed 's/%//g' 0 6 0 011.把一行内容切片,并且换行 [root@localhost tmp]# cat 2.txt 192.168.1.1,192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5, #原文件内容 使用sed+for循环输出。 [root@localhost tmp]# for i in `sed 's/,/ /g' 2.txt` ; do echo $i ;done 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 192.168.1.5 写成脚本
#!/bin/bash #1、通过sed把逗号替换成空格; #2、通过for循环输出,达到把一行内容切片换行目的。 # author: 此生逍遥 FILE=`sed 's/,/ /g' /tmp/2.txt` #echo $FILE for i in $FILE; do echo $i #echo "" #输出结果间隔一行 done12.判断用户是否存在
#!/bin/bash #面试题:编写一个shell,判断系统用户user001,user002,~~~user100是否存在 ######### for i in `seq 1 10`; do id user$i &> /dev/null if [ $? -eq 0 ] ;then echo "账号 user$i 存在" else echo "账号 user$i 不存在" fi done13.文件横向合并
#!/bin/bash #把a,b两个文件合并成c, 内容a 01|李|2022-01-01 b 01|file/20220101 #c效果 01|李|2022-01-01|01|file/20220101 for i in `seq 1 $(cat a.csv|wc -l )` ; do head -$i a.csv |tail -1 >> $i.csv head -$i b.csv |tail -1 >> $i.csv sed 'N;s/\n/|/' $i.csv >> c.csv done cat c.csv14.对系统日志文件进行分组打包
#!/bin/bash for i in `ls /tmp/` do tar -czf 2017_log_$i.tgz $i done15.批量远程复制文件
#!/bin/bash for i in `seq 100 200` do scp -r /tmp/jfedu.txt [email protected].$i:/data/webapps/www done16.磁盘使用率计算 方法一(sed把换行符换成空格)
#!/bin/bash # 监控磁盘使用率,超过指定使用率后打印出来。 # author:hqq ########### DISK_USE=`df -h | awk 'NR>1 {print $5}' | awk -F% '{print $1}' | sed ':a;N;$!ba;s/\n/ /g'` for i in $DISK_USE;do if (( $i > 50 ));then echo "disk usage $i% > 50%" NUM=$i PART=`df -h | grep -w $NUM` echo "分区信息:$PART" echo "" fi done方法二(把结果存到一个文件,再for循环)
#!/bin/bash # 监控磁盘使用率,超过指定使用率后打印出来。 # author:hqq ########### a=`df -h | awk 'NR>1 {print $5}' | sed 's/\%//g' > 1.txt` b=50 for i in `cat 1.txt` ;do if (( $i > $b ));then echo "$i% > $b%" NUM=$i PART=`df -h | grep -w $NUM` echo "分区信息:$PART" echo "" fi done方法三(直接for循环df 切出来的值)
#!/bin/bash a=`df -h | awk 'NR>1 {print $5}' | sed 's/\%//g' ` b=20 for i in $a ;do if (( $i >= $b ));then NUM=$i PART=`df -h | grep -w $NUM` echo "分区信息:$PART" echo "$i% >= $b%" echo "" fi done检查磁盘使用率 for i in $(df -h|awk 'NR>1 {print $5}'|sed 's/%//g');do if [ $i -gt 1 ];then echo $i% ;fi ;done 标签:脚本,do,shell,示例,192.168,echo,sed,done,bash From: https://www.cnblogs.com/csxy-py/p/16776709.html