Linux常用命令及shell脚本编写指南

这篇博客详细介绍了Shell脚本中的命令代换、算术代换、比较运算、逻辑运算及其应用,包括if、case、for、while循环结构。同时讲解了特殊变量的使用,如位置参数、命令状态等。还涉及到了打印命令、方法定义、正则表达式、文件操作以及系统和网络命令的使用。文章最后提到了交互式登录和vim编辑器的实用技巧。

1.命令代换

DATE=$(date) #先执行括号date参数再赋值

# 2.算术代换

$[8#10+2#11] #其中8和2表示进制数,后面计算按进制运算

[-d -f -z -n ] 3.比较运算

[ -d DIR ] 如果DIR存在并且是一个目录则为真

[ -f FILE ] 如果FILE存在且是一个普通文件则为真

[ -z STRING ] 如果STRING的长度为零则为真

[ -n STRING ] 如果STRING的长度非零则为真

[ STRING1 = STRING2 ] 如果两个字符串相同则为真

[ ARG1 OP ARG2 ] ARG1和ARG2应该是整数或者取值为整数的变量,OP是-eq(等于)-ne(不等于)-lt(小于)-le(小于等于)-gt(大于)-ge(大于等于)之中的一个"

if,case,for,while,break 4.逻辑运算

#!/bin/sh 
SYSTEM=`uname -s`    
 if [ $SYSTEM = "Linux" ] ; then # 如果是linux话输出linux字符串 
echo "Linux" elif [ $SYSTEM = "FreeBSD" ] ; 
then echo "FreeBSD" 
elif [ $SYSTEM = "Solaris" ] ;
 then echo "Solaris"
 else echo "What?"
 fi # 判断结束,以fi结尾
#!/bin/sh 
case $参数 
in ARG1) do ;;
 ARG2) do ;; 
*) do ;;
 esac 判定
for $参数 in 1 2 3;
 do ;
 done 

for $参数 in `cat 1.text`;
do;
done
while [比较或定值确定循环次数];
do;
done

break跳出循环,continue跳过本次循环

所有$命令 5.特殊变量

"$0、$1、$2... 这些称为位置参数,相当于C语言main函数的argv[0、]argv[1]、argv[2]... 传参直接sh test.sh 参数0 参数1 参数2

$# 相当于C语言main函数的argc - 1

$@ 表示参数列表""$1"" ""$2"" ...,可以用在for循环中的in后面。

$* 表示参数列表""$1"" ""$2"" ...,同上

$? 上一条命令的执行状态

$$ 当前进程号"

echo 6.打印

"tee -a 追加相当于>>

2>&1 标准重定向到目标文件

<& 标准输入"

function 7.方法(面向对象)

function(){
sh -x install.sh;
while [ 1 ];
do
done;
}; fuction

sh -x 8.命令调试

sh -x script.sh #或在脚本开头#!/bin/sh -x 或在脚本中set -启用+禁用 x

[a-zA-Z0-9.-] /grep/sed/awk 9.正则

email地址的正则表达式可以写成[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+.[a-zA-Z0-9_.-]+

grep -c 计数 grep -i 不区分大小写 grep -v 剔除匹配行 grep -rn 递归

find / -name 名称 -exec/-ok grep -i 内容匹配值 #-exec/-ok相当于管道

find / -name 名称|grep -i 内容匹配值

ps -ef|grep -v grep| grep 内容匹配|awk '{print $2}'|xargs kill -i

sed '2,5d' 文件 #d删除 i插入 s替换

查找当前文件里最大的10个

lsof . | awk '{ if($7 > 1048576) print $7/1048576 ""MB ""$9 }' | sort -n -u | tail

dd\hdparm\wget\fallocate\hostnamectl\watch\fdisk 10.系统使用

测试硬盘写速度:

dd if=/dev/zero of=/tmp/output.img bs=8k count=256k; rm -rf /tmp/output.img

测试硬盘读速度:

hdparm -Tt /dev/sda

用wget命令执行ftp下载:

wget -m ftp://username:password@hostname

生成随机密码(例子里是16个字符长):

LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;

cpu某个内核满载

dd if=/dev/zero of=/dev/null &

内存使用1G

mkdir /tmp/memory

mount -t tmpfs tmpfs /tmp/memory

fallocate -l 1g /tmp/memory/test

查看当前环境系统

hostnamectl

动态查看,时间间隔1s

watch -n 1 ps ux

磁盘格式化/分盘

fdisk

expect工具 11.交互式登录

passwd=!QAZ2wsx
expect <<EOF
spawn passwd noahark
expect {        
        ""New password:"" { send ""$passwd\n"";exp_continue }        
        ""Retype new password:"" { send ""$passwd\n"" }
}
expect eof 
EOF"
getopts	11.getopts使用	"while getopts a:b: opt
do
case $opt in
a)
;;
b)
;;
?)"

vim 12.vim工具使用

乱码修改

新建~/.vimrc配置文件

set fencs=utf-8,gbk,gb2312,gb18030

source ~/.vimrc

打开文件跳到最后

vim + file_name 或者vim file_name后crtl+G

打印分隔符

printf '%100s\n' | tr ' ' =

进行文件内容差异对比

vimdiff 文本1 文本2 "

network 13网络命令

Windows系统:ping –S 源 目标

Liunx 系统:ping –I 源 目标

华为交换机:ping –a 源 目标

查看端口占用: netstat -nlp|grep 端口

测试端口:telnet ip 端口

查看当前ip地址:ip a

查看路由: route -n 等同于 netstat -r

抓包测试: tcpdump -i eth0 -nnX port 21 指定网卡及端口使用16进制抓包

启动或关闭网卡:ifup/ifdown eth0"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值