shellscript总结

By xia0

#shellscript总结

#变量

name="zhang"
  • 变量名和等号之间不能有空格

  • 英文,数字下划线,不能有空格,标点

  • 不能以数字开头

  • 不能是关键字

#单引号/双引号

  • 单引号会原样输出

  • 双引号里面可以有变量,转义字符

#字符串

# 拼接
name='zhang'
helloname="hello, "$name"!"
helloname="hello, "${name}"!"

#获取长度
echo ${#name}  # [out]:5

#提取子字符串

echo ${name:1:4} #[out]:hang

#数组


my_array=(A B C D)

echo "数组的元素为: ${my_array[1]}"
echo "数组的元素为: ${my_array[@]}"

#[out]:
#数组的元素为: B
#数组的元素为: A B C D

#文件

#文件存在且为目录
-d 

#文件存在且为一般文件
-f

#文件存在且为链接文件
-L

#if

a=10
b=20

if [ $a == $b ];then
    echo "a 等于 b"
elif [ $a -gt $b ];then
    echo "a 大于 b"
elif [ $a -lt $b ];then
    echo "a 小于 b"
else
    echo "没有符合的条件"
fi    

# [out]:a 等于 b

#for

# for in
for loop in 1 2 3 4 5;do
    echo "The value is: $loop"
done

# [out]:The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5

#xfind

function xfind(){
    find $1 -type f -regex ".*" -print0 | xargs -0  grep -i $2
}

if [ -z "$1" -o -z "$2" ]; then
    echo "[usage] xfind path_of_dir key_words_you_want_to_search"
else
    xfind $1 $2
fi

#xargs

管道是标准输出到标准输入,但并不是所有命令都是从标准输入中取参数,所以需要xargs命令。使其从标准输出到命令参数

更多细节点这里

#function

函数返回值只能输0-255数字,且用$?接收

function test(){
    read num
    return  $num
}

test
if [ $? -eq 1 ];then
    echo "yes"
else
    echo "no"
fi

#crontab

http://wangchujiang.com/linux-command/c/crontab.html

默认日志路径:/var/mail/Username

修改邮件接收地址:MAILTO=939xxxx983@qq.com

日志重定向:* * * * * command >> /Users/Samuel/Desktop/command.log 2>&1