1. 第一行必须是"#!/bin/sh"
- 它不是注释,"#!/bin/sh"是对shell的声明,说明你所用的是那种类型的shell及其路径所在;
- 如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本的shell.
- 如果脚本被编写为在Kornshell ksh中运行,而默认运行shell脚本的为C shell csh,则脚本在执行过程中很可能失败。
- 所以建议大家就把"#!/bin/sh"当成C 语言的main函数一样,写shell必须有,以使shell程序更严密。
2. 注释:一行开头为 "#"
3. 定义变量
m='memebr'
输出m :memebr
#!/bin/bash
m='member'
echo $m
变量拼接
#!/bin/bash
m='member'
echo $m'是成员'
#!/bin/bash
m='member'
n='是成员'
echo $m$n
输出 member是成员
4. 逻辑符号
命令1 && 命令2
如果左边的“命令1”执行成功,那么右边的“命令2”才会被执行。
命令1 || 命令2
与&&相反。如果“命令1”未执行成功,那么就执行“命令2”。
5. 接收参数
脚本文件“test.sh”,其内容如下:
#!/bin/bash
m=$1
n=$2
echo $m-$n
执行命令:“./test.sh 111 222”;输出 111-222
6. 控制流:if/then/elif/else/fi
注意"["和"]"前后的空格必须有,否则提示错误
结尾必须是fi,if 反过来 fi 相当于Java里的Finally,这里fi是必须的。
#!/bin/bash
myName=$1
if [ "$myName" = "superman" ];then
echo "I know you!"
else
echo "Nice to see you!"
fi
执行命令:“./test.sh superman ”;输出 I know you!
示例:判断文件
if [ -e './test.sh' ];then
echo './test.sh''是文件'
else
echo './test.sh''不是文件'
fi
执行命令:“./test.sh ”;输出 ./test.sh是文件
#!/bin/bash
fileName=$1
if [ -e './'$fileName ];then
echo $fileName'是文件'
else
echo $fileName'不是文件'
fi
执行命令:./test.sh test.sh 输出 test.sh是文件
![](https://img.haomeiwen.com/i7567917/63937ff37ac5c220.png)
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是具名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。
7. 循环:for/do/done
注意:循环项是以“空格”拆分的字符串,类似Java的split
name="super man "
for loop in $name; do
echo $loop;
done
执行命令:“./test.sh ”;输出 super \n man
8. 格式化输出日期
curdate="`date +%Y%m%d%H%M%S`"
echo $curdate
执行命令:“./test.sh ”;输出 20180323150142
time=$(date +%m-%d--%H:%M:%S)
echo "时间:$time"
执行命令:“./test.sh ”;输出 时间:03-23--15:02:29
9. 系统变量
pwd=$PWD # 当前目录
user=$USER # 当前用户
echo $pwd
echo $user
执行命令:“./test.sh ”;输出 /Users/superman/Desktop /n superman
网友评论