shell脚本学习笔记

set命令

set -x: 该代码以后的代码都开启调试输出,直到遇到set +x取消
set +x: 关闭调试输出
set -e: 该代码以后的代码如果返回一个非0的值,那么整个脚本立即退出,遇到set +e取消该功能
set +e: 取消set -e的功能

if语句

-n: 表示不为空
-z: 表示长度为0
-eq: 等于
-lt: 小于
-gt: 大于
-ge: 不小于
-ne: 不等于
-le: 不大于
-r: 如果文件存在且可读
-w: 如果文件存在且可写
-x: 如果文件存在且可执行

不为空的时候输出hello world!

1
2
3
4
5
#!/bin/sh

if [ -n "$1" ]; then
echo "hello world!"
fi

为空的时候执行/bin/bash, 不为空输出( \$@ 表示输出所有内容, \$1 表示第一个参数)

1
2
3
4
5
6
#!/bin/sh
if [ -z "$1" ]; then
/bin/bash
else
echo $@
fi

while语句

1
2
3
4
5
6
7
8
#!/bin/sh

i=1
while [ $i -le 256 ]
do
echo "$i times hello world"
i=$(expr $i + 1)
done

for语句

1
2
3
4
5
6
7
8
#!/bin/sh

i=1
for i in $(seq 1 256)
do
echo "$i times hello world"
i=$(expr $i + 1)
done

若干用法总结

将第一个参数装换成小写,upper和lower对调即是大写

1
2
3
4
5
#!/bin/sh

if [ ! -z "$1" ]; then
echo $1 |tr '[:upper:]' '[:lower:]'
fi

查找/home/yankang/shell/test/是否为空

1
2
3
4
5
#!/bin/sh

if [ -n "$(find /home/yankang/shell/test/ -prune -empty)" ]; then
echo "hello world"
fi

如果第一个参数后面是0~9之间的数字则后面加上”p\${2}”,否则直接后面加上”\${2}”

1
2
3
4
5
6
7
8
9
function dev_part {
if [[ "${1:0-1:1}" == [0-9] ]]; then
echo "${1}p${2}"
else
echo "${1}${2}"
fi
}

echo $(dev_part $1 $2)

奇怪的用法,后面的‘exec complete’没有输出

1
2
3
4
5
6
7
cat ./test << EOF
> echo "something right"
> exec ./hello
> echo "exec complete"
> EOF
chmod +x test
./test