diff --git a/PHP/php-shell_run.md b/PHP/php-shell_run.md
new file mode 100644
index 0000000..c62cdce
--- /dev/null
+++ b/PHP/php-shell_run.md
@@ -0,0 +1,85 @@
+## PHP 和 Shell 如何很好的搭配
+
+## shell 脚本
+```bash
+#!/bin/bash
+#######################################################
+# $Name: check_oss_cut.sh
+# $Author: ShaoBo Wan (Tinywan)
+# $organization: https://github.com/Tinywan
+#######################################################
+
+if [ $# -ne 3 ] ; then
+ echo 1 ; // 注意这个值才是php 执行函数接受到的返回值,而不是 exit
+ exit 1;
+fi
+
+if [ $# -ne 6 ] ; then
+ echo 2 ;
+ exit 2;
+fi
+
+exit 0;
+```
+
+## PHP 脚本
+```php
+ /**
+ * 脚本没有执行权限 Permission denied
+ */
+ const PERMISSION = 126;
+
+ /**
+ * 需要使用dos2unix命令将文件转换为unix格式
+ * eg:dos2unix file
+ */
+ const DOS2UNIX = 127;
+
+ /**
+ * 脚本内部命令执行错误
+ */
+ const INTERNAL_ERROR = 247;
+
+ const OUTPUT_MSG = [
+ 0 => 'success',
+ 1 => 'API Sign Error , Please task_id',
+ 2 => 'Oss File Download Fail',
+ 3 => 'FFmpeg cut/concat Video Fail',
+ 4 => 'Rename file error, Disk is full',
+ 5 => '截取缩略图失败,请检查视频开始、结束、视频截图时间',
+ ];
+
+ /**
+ * 在退出时使用不同的错误码
+ */
+ public function phpRunShellScript()
+ {
+ // 脚本路径
+ $scriptPath = $_SERVER['DOCUMENT_ROOT'] . "/shell/php-test.sh";
+ $scriptParam = '1 2 8';
+ $cmdStr = "{$scriptPath} {$scriptParam}";
+ echo $cmdStr;
+ // 执行
+ exec("{$cmdStr}", $output_result, $return_status);
+
+ // 返回码判断
+ if($return_status == self::PERMISSION ){
+ echo "chmod u+x ".$scriptPath."
";
+ }elseif ($return_status == self::DOS2UNIX){
+ echo "需要使用dos2unix命令将文件转换为unix格式
";
+ }else{
+ // 这时候要根据脚本返回的第二个返回值判断脚本具体哪里出错误了
+ echo "脚本执行异常 MSg :" . $return_status . "
";
+ if ( isset($output_result[1]) && $output_result[1] == 1) {
+ echo " MSg1 : ".self::OUTPUT_MSG[$output_result[1]]."
";
+ } elseif (isset($output_result[1]) && $output_result[1] == 2){
+ echo " MSg2 : ".self::OUTPUT_MSG[$output_result[1]]."
";
+ } elseif (isset($output_result[1]) && $output_result[1] == 3){
+ echo " MSg3 : ".self::OUTPUT_MSG[$output_result[1]]."
";
+ }
+ }
+ echo 'success';
+ }
+```
+
+
diff --git a/README.md b/README.md
index 2c03561..07ea1d0 100644
--- a/README.md
+++ b/README.md
@@ -56,6 +56,7 @@
* [PHP脚本运行Redis](#PHP_Run_Redis)
* [PHP7中php.ini/php-fpm/www.conf的配置,Nginx和PHP-FPM的开机自动启动脚本](/PHP/PHP-FPM/config.md)
* [PHP 脚本执行一个Redis 订阅功能,用于监听键过期事件,返回一个回调,API接受改事件](/Redis-PHP/Php-Run-Redis-psubscribe/nohupRedisNotify.php)
+* [PHP和Shell 脚本如何很好的搭配](/PHP/php-shell_run.md)
#### Linux 教程
* [Linux 基础知识](/Linux/linux-basic.md)
@@ -64,7 +65,8 @@
* [实战篇](http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html)
* [定时器教程](http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html)
#### Shell 教程
-* [编写快速安全Bash脚本的建议](/Shell/write-shell-suggestions.md)
+* [编写快速安全Bash脚本的建议](https://www.oschina.net/translate/bash-scripting-quirks-safety-tips)
+* [写好shell脚本的13个技巧](https://mp.weixin.qq.com/s/f3xDHZ7dCQr7sHJ9KDvuyQ)
* [shell脚本实现分日志级别记录日志](/Nginx-Rtmp/Shell_Log.sh)
* [Nginx日志定时备份和删除](/Nginx-Rtmp/Shell_Nginx_Log_cut.sh)
* [SHELL脚本小技巧](/Nginx-Rtmp/Shell_script.md)