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

1万+

被折叠的 条评论
为什么被折叠?



