脚本开发
脚本开发
条件分支结构
if [ -d "$JAVA_HOME/bin" ] ; then
PATH="$JAVA_HOME/bin:$PATH"
限定运行权限
if [ "$USER" != 'jboss1' ]; then
echo "Sorry, this script must be run as JBOSS1!"
exit 1
fi
echo "continue script"
根用户判别
if [ "$UID" -gt 0 ]; then
echo "Sorry, this script must be run as ROOT!"
exit 1
fi
echo "continue script"
带参数执行程序
$#
表示参数数量
if [ $# -eq 0 ]; then
echo "No arguments provided"
exit 1
fi
echo "arguments found: $#"
交互输入
echo "enter a word please:"
read word
echo $word
read -p "Install Software ?? [Y/n]: " answ
if [ "$answ" == 'n' ]; then
exit 1
fi
echo "Installation starting..."
Shell中单引号和双引号区别
新建文件test.sh
,内容如下:
#!/bin/bash
do_date=$1
echo '$do_date'
echo "$do_date"
echo "'$do_date'"
echo '"$do_date"'
echo `date`
执行结果
test.sh 2019-02-10
$do_date
2019-02-10
'2019-02-10'
总结:
- 单引号不取变量值
- 双引号取变量值
- 反引号`,执行引号中命令
- 双引号内部嵌套单引号,取出变量值
- 单引号内部嵌套双引号,不取出变量值
重定向
# 输出stdout
file > myfiles.txt
# 输出stderr
file 2> myfiles-err.txt
# 同时输出stdout和stderr
file &> alloutput.txt
# 重定向文件到命令
mysql -u user1 p db_name < db.sql
mysql -u user1 p db_name < db.sql > out.txt 2> outeer.txt
# 同时传递stdout和stderr到管道
find 2>&1 | grep example.txt
# 在当前目录(以及其子目录)中查找文件和目录,然后通过管道将结果传递给grep命令,以筛选包含字符串'example.txt'的行。
find |& grep example.txt
# 同时传递stdout和stderr,并把stdout丢弃
find 2>&1 >/dev/null | grep example.txt
判断退出状态
# 获取上一条命令的退出状态
exit_status=$?
# 判断退出状态
if [ $exit_status -ne 0 ]; then
echo "上一条命令执行失败,退出脚本。"
exit 1
fi