设置变量 set命令输出所有的变量包括全局和局部
env只显示全局
declare 输出所有的变量、函数、整数、和已导出的变量
引号使用 单引号:所见即所得,将单引号的内容原样输出
双引号:输出双引号的所有内容、如果内容有命令需要用反引号
反引号:一般引用命令
特殊变量 $0:获取当前执行脚本的文件名
$n:获取当前执行的shell脚本的第n个参数
$#:获取当前shell脚本后面参数的总个数
$@:获取脚本所有传参的参数
$?:获取上一个执行的状态的返回值
$$:获取当前执行脚本的进程号
获取参数时当数字大于9 需要用${10} 大括号括起来
echo输出参数 -n 不换行输出内容
-e 解析转义字符 \n 换行\r 回车\t 制表符\b 退格
#!/bin/sh
echo $1 $2 #取第一个和第二个参数
if [ $# -eq 2 ] # $# 取传参的个数
then
shift #shift 作用是往左移一位
echo $1
fi
变量子串 ${变量} 返回变量的内容
${#变量} 返回变量的长度
${变量:2:2} 从第二个字符开始截取截取2个字符
xargs完成了两个行为:处理管道传输过来的stdin;将处理后的传递到正确的位置上。
xargs使用-p选项是交互询问式的,只有每次询问的时候输入y(或yes)才会执行,直接按enter键是不会执行的。
xargs -d有如下行为:
? xargs -d可以指定分段符,可以是单个符号、字母或数字。如指定字母o为分隔符:xargs -d"o"。
? xargs -d是分割阶段的选项,所以它优先于分批选项(-n、-L、-i)。
? xargs -d不是先xargs再-d处理的,它是区别于独立的xargs的另一个分割选项。
xargs -0的行为和xargs -d基本是一样的,只是-d是指定分隔符,-0是指定固定的\0作为分隔符。其实xargs -0就是特殊的xargs -d的一种,它等价于xargs -d"\0"。
xargs -0行为如下:
? xargs -0是分割阶段的选项,所以它优先于分批选项(-n、-L、-i)。
? xargs -0不是先xargs再-0处理的,它是区别于独立的xargs的另一个分割选项。
? xargs -0可以处理接收的stdin中的null字符(\0)。如果不使用-0选项或- -null选项,检测到\0后会给出警告提醒,并只向命令传递非\0段。xargs -0和- -null是一样的效果。
xargs -0会忽略所有文本意义上的符号,它的主要目的是处理\0符号
xargs -I(大写字母i)和xargs -i是一样的,只是-i默认使用大括号作为替换符号,-I则可以指定其他的符号、字母、数字作为替换符号,但是必须用引号包起来。man推荐使用-I代替-i,但是一般都图个简单使用-i,除非在命令中不能使用大括号,如touch {1..1000}.log时大括号就不能用来做替换符号。
方法一:通过常用的find的-print0选项使用\0来分隔而不是\n分隔,再通过xargs -0来配对保证one space.log的整体性。因为-print0后one space.log的前后各有一个\0,但是文件名中间没有。
[root@xuexi tmp]# find -name "* *.log" -print0 | xargs -0 rm -rf
方法二:不在find上处理,在xargs上处理,只要通过配合-i选项,就能宣告它的整体性。
[root@xuexi tmp]# find -name "* *.log" | xargs -i rm -rf "{}"
算数运算符: + - *(乘) /(除) %取余数 ** 幂运算 ++ 增加 --递减 !取反 &&与 ||或
i=2 i=i+8 echo $i 结果为i=8 如果是let i=i+8 结果就对了
let演示脚本
#!/bin/sh
#set -x
function checkurl(){
time=5
faild=0
success=0
while true
do
wget --timeout=$time --tries=1 badddidu.com -q -o /dev/null
if [ $? -ne 0 ]
then
let faild=$faild+1
else
let success=$success+1
fi
if [ $success -ge 1 ]
then
echo success
exit 0
fi
if [ $faild -ge 2 ]
then
echo system is down
exit 2
fi
done
}
checkurl
read用法 read -t时间默认为秒 -p ”please input a num “ num 用于接受用户输入的字符
示例
#!/bin/sh
read -t 20 -p "please input two numbers" a b
if [ ${#a} -le 0 ];then
echo "the first num is null"
else
echo "the first num is not null"
exit 1
fi
[ ${#b} -le 0 ]&&{
echo "the second num is null"
exit 2
}
#no.2
expr $a + 1 &>/dev/null
val=$?
expr $b + 1 &>/dev/null
val1=$?
if [ $val -ne 0 -o $val1 -ne 0 ];then
echo "first and second is null"
exit 1
fi