shell 小技巧

写脚本时需要配置数据库但又不想进数据库操作(进了数据库shell脚本就会停止)如何绕过mysql

mysql 有个参数 -e 可以绕过mysql终端进行配置
[root@localhost ~]# mysql -uroot -ppasswd -e "create database ghost"
将配置信息插入需修改的文件里某一行后面
[root@localhost ~]# sed -i -e '10a -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT' /etc/sysconfig/iptables
将某文件里的某行某个参数修改自定义的参数
[root@localhost ~]# sed -i '14s/Url/'$Url'/g' /root/ghost/config.js
查找尝试破解我服务器密码的IP以及尝试破解用户名并将其归档统计后排序取前20行
[root@localhost ~]# lastb >lastb.log ;cat lastb.log | awk '{print $1,$3}'|sort -nr|uniq -c |sort -nr |head -n 20
改变输出的字体显示的颜色
 echo -e "\033[30m 黑色字 \033[0m"
 echo -e "\033[31m 红色字 \033[0m"
 echo -e "\033[32m 绿色字 \033[0m"
 echo -e "\033[33m 黄色字 \033[0m"
 echo -e "\033[34m 蓝色字 \033[0m"
 echo -e "\033[35m 紫色字 \033[0m"
 echo -e "\033[36m 天蓝字 \033[0m"
 echo -e "\033[37m 白色字 \033[0m"
 echo -e "\033[40;37m 黑底白字 \033[0m"
 echo -e "\033[41;37m 红底白字 \033[0m"
 echo -e "\033[42;37m 绿底白字 \033[0m"
 echo -e "\033[43;37m 黄底白字 \033[0m"
 echo -e "\033[44;37m 蓝底白字 \033[0m"
 echo -e "\033[45;37m 紫底白字 \033[0m"
 echo -e "\033[46;37m 天蓝底白字 \033[0m"
 echo -e "\033[47;30m 白底黑字 \033[0m"
关闭互动回显
[root@localhost shell]# bash test.sh 
Please Enter a Passwd: 
Please Enter again Passwd: 
[root@localhost shell]# cat test.sh 
#!/bin/bash
echo  "Please Enter a Passwd: "
stty -echo 
read passwd_1 < /dev/tty
echo  "Please Enter again Passwd: " 
read passwd_2 < /dev/tty
stty echo
[root@localhost shell]# 

用于切割文本

csplit
split

tr 命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大

-c或——complerment:取代所有不属于第一字符集的字符;
-d或——delete:删除所有属于第一字符集的字符;
-s或--squeeze-repeats:把连续重复的字符以单独一个字符表示;
-t或--truncate-set1:先删除第一字符集较第二字符集多出的字符。

将输入字符由大写转换为小写:

echo "HELLO WORLD" | tr 'A-Z' 'a-z'
hello world

使用tr删除字符:

echo "hello 123 world 456" | tr -d '0-9'
hello world

将制表符转换为空格:

cat text | tr '\t' ' '

用tr压缩字符,可以压缩输入中重复的字符:

echo "thissss is a text linnnnnnne." | tr -s ' sn'
this is a text line.

tee 类似 > tee -a 类似 >> 追加

comm

Shell 中的$参数

echo  $0   获取当前执行的shell脚本的文件名
echo  $n   获取当前执行的shell脚本的第n个参数值,n=1..9
echo  $*   获取当前shell的所有参数
echo  $#   获取当前shell命令行中参数的总个数
echo  $$   获取当前shell的进程号(PID)
echo  $!   执行上一个指令的PID
echo  $?   获取上一个指令的返回值
echo  $_   在此之前执行的命令或脚本的最后一个参数



批量修改文件名:

[root@cloud test]# cat a.log 
stu_10222_1_finished.jpg
stu_10222_2_finished.jpg
stu_10222_3_finished.jpg
stu_10222_4_finished.jpg
[root@cloud test]# 
[root@cloud test]# for i in `cat a.log`;do touch $i;done
[rootcloud test]# ls
a.log  stu_10222_1_finished.jpg  stu_10222_2_finished.jpg  stu_10222_3_finished.jpg  stu_10222_4_finished.jpg
[root@cloud test]# for f in `ls ./*.jpg`;do /bin/mv $f  `echo "${f%finished*}.jpg"`;done
[root@cloud test]# ls
a.log  stu_10222_1_.jpg  stu_10222_2_.jpg  stu_10222_3_.jpg  stu_10222_4_.jpg
comments powered by Disqus