shell script 运行方法
--------------------------------------
1. 以命令方式执行( 一般是以这种方式执行 )

首先修改档案权限可以运行
chmod 755 abc
chmod u+x abc
./abc  直接间接目录运行

2. 以bash或 sh方式执行 
sh abc 或 bash abc 使用sh 或bash 运行

( 以这种方式运行的bash, 不需要运行权限 )

/etc/init.d/ 目录下全部是script, 可以学习参考

良好的script习惯
--------------------------------------
良好的注释格式:

注释 功能, 版本信息, 作者,联系方式, 版权宣告, history, 使用绝对路径, 环境变量预先宣告与设定, 特殊情况加个人注释
结构化程序设计, 软件工程学( 例如函数只完成一个功能 等等 )
数值运算方式 var=$((运算内容))

测试
---------------------------------------
test -e , -d , -f , 权限 -r -w -x  等
test file1 -nt file2 ( file1 是否比 file2 新 newer than )
test file1 -ot file2 ( file1 是否比 file2 老 older than )
test file1 -ef file2 ( 判断两个档案是否为一个, 可用在 hard link )
-eq -ne -gt -lt -ge –le

==  !=  >    <  >=  <=
test -z string 判断是否为空串
test -n string 是否非空
test str1 = str2 , !=
多重条件判断 test -r filename -a -x filename  ( -a 表示and )
test -o 表示 or ! 非
[] 判断, 必须要有空格, 可以使用 == 号 ( 与 test 等价 )

[ –z “$HOME” ]; echo $?  其中 [] 就等价于 test –z “$HOME”; echo $?

参数
---------------------------------------
/path/to/scriptname opt1 opt2 opt3 opt4
  $0                $1    $2    $3    $4
$# 参数个数 上例为 4
$@ 代表 "$1""$2""$3""$4"
$*  跟 $@差不多, 只不过每个变量中间有个空格

shift 参数向左移动, 例如原来有 one two three four 四个参数, 执行 echo “$#” echo “$@”

第1次: 4, one two three four

执行 shift

第2次: 3, two three four

执行 shift

第3次: 2, three four

依此类推左移

程序常用
-----------------------------------
if [ ]; then    注意 [] 中的内容要有空格
elif []; then
else
fi

case $变量名 in
"1")
    ;;
"2")
    ;;
"*")
    ;;
esac

function fname()
{
  echo "hello"
}
while []   条件成立, 就执行循环内
do
done

until []    条件整理, 就停止, 正好与 while相反
do
done

for var in count1 count2 count3 ...  第一次循环为count1, 第二次为count2, ...
do
done

for ((初始值; 限制值; 执行步长))
do
done

debug
------------------------------------------
sh [-nvx] script.sh
-n 不执行script, 仅检查语法问题
-v 再执行 script前, 先将script内容输出到屏幕
-x 将使用到的script内容显示到屏幕上, 最有用

也可以使用 echo 来显示要查看的内容, 可以通过类似条件编译的办法来显示, 从C语言借鉴.

特殊字符
-----------------------------------------
() 命令行, 命令行会进入子shell, 例如在外定义了a=1, 但是命令行里的a是没有定义的
{} 代码块, 也叫匿名函数, 它里边的内容可以被外边可见
local a, 定义局部变量只能在 function内
: 空语句, while : 进入死循环
: >data.txt 等价于 cat dev/null>data.txt
(()) 数学计算扩展, 也可以处理c的风格, 例如for循环, a++ 即 ++操作符
>| 强制重定向
- 可以用于重定向 stdin 或 stdout
shift 用来移位, 例如移位 $0,$1,$2...
if 后边也可以接命令, 每个命令都是有回传值的, 例如
if cd "$dir" 2>/dev/null; then
let 用来声明常量 let "dec=32"
let #bin = 2#101111101' 2进制常量

shellscript的更多相关文章

  1. shell 编程基础(1)---初识shellscript

    shellscript 是linux下强大的系统管理工具,可以通过bash命令和管道命令直接在linux系统上进行编程,所写的脚本不需要编译就可以执行,对于系统管理而言十分方便. #!/bin/bas ...

  2. 小记一次shellscript的麻烦

    小记一次shellscript的麻烦 一.起因: 之前写过篇文章 文本分析实例 ,大致的内容就是对 "nginx的web服务器进行日志分析,删除不被访问的截图". 点我打开哔哩哔哩 ...

  3. ShellScript值传递参数

    Shell传递参数 ######################################摘自菜鸟教程:http://www.runoob.com/linux/linux-shell-passi ...

  4. ShellScript之变量

    Shell脚本之变量学习 ##########################ShellScript初学者,文章摘自菜鸟教程################################ 1.She ...

  5. shell-script的简单举例

    #!/bin/bash #defind the path PATH=/usr/local export PATH read -p "please input your first name: ...

  6. 一些比较好的shellscript脚本

    1. 变量与替换 #!/bin/bash # 变量替换 # 另外, 变量替换还有许多别的语法 # 例如, b=${a/23/bb} 将 23 替换成 bb 等等, 用到时再找 a=375 hello= ...

  7. linux学习笔记-shell-script相关知识

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.shell script的执行方法 条件:shell脚本文件必须具备可读可执行权限 1.直接命令执行 (1)使用绝对路径执行 ...

  8. Jenkins中shell-script执行报错sh: line 2: npm: command not found

    <1>本地执行npm run build--正常 <2>查看环境变量--正常 [root@localhost bin]# echo $PATH /usr/local/node/ ...

  9. linux定时备份mysql并同步到其它服务器

    数据在任何一家公司里面都是最核心的资产,定期备份则是为了保证数据库出现问题的时候能够及时回滚到最近的备份点,将损失缩小到最小 这篇文章将会两部分来说明:1.mysql的定期备份:2.同步到其它服务器 ...

随机推荐

  1. 2014小米,百度,pptv,去哪儿笔试题目回忆

    今天一共笔试了这四家,真累啊,上午10点小米,下午2点百度,下午3点PPTV,下午5点去哪儿,今天右手太酸了,打的都话了50左右,如果没面试通知,那我可亏大了 小米就三题: 1.一个数组,排序要求,所 ...

  2. Firefly 其他博客

    http://www.cnblogs.com/9miaoshetuan/tag/Firefly/ http://www.cnblogs.com/9miaoshetuan/p/3853124.html ...

  3. 【Linux】xshell连接中断后就无法连接虚拟机中的Linux

    具体情景是这样的: 在使用Linux的时候,本来一直好好的,突然就断了,我去百度了一番,网上的说法有千万种 有的说:是由于防火墙的问题 有的说:是由于Linux与其他ip冲突造成 ... 说法千万种, ...

  4. 详解Android中那些酷炫返回方式的实现

    Android手机都会有返回键,不管是实体键,还是虚拟键.Android用户主要也都是通过这个返回键操控页面返回方式的,不比IOS逼格甚高的只保留一个操作键.这种方式是最普遍的返回方式,还有一种也是比 ...

  5. node.js零基础详细教程(6):mongodb数据库操作 以及导入导出

    第六章 建议学习时间4小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...

  6. ADB 高级应用

    一.利用无线来查看adb shell > adb tcpip 5555   连接: > adb connect IP:5555   见后文<调试注意事项>   二.模拟按键   ...

  7. C# nosql之redis初体验

    Redis官方是不支持windows的,只是 Microsoft Open Tech group 在 GitHub上开发了一个Win64的版本,项目地址是: https://github.com/MS ...

  8. sql关于group by之后把每一条记录的详情的某个字段值合并提取的方法

    在利用group by写了统计语句之后,还有一个查看每一个记录详情的需求, 首先想到的是根据group by的条件去拼接查询条件, 但是条件有点多,拼接起来不仅麻烦,还容易出错, 所以想到要在grou ...

  9. UIPopoverController具体解释

    今天一位童鞋问我个问题.大意是popoverController不会显示.经过我寻找问题发现以下这种方法不好掌控. 为什么说他不好掌控那.我这个给大家带来一个列子.通过这个列子来介绍PopoverCo ...

  10. [Android进阶]Binder学习(初始篇)

    Android中Binder学习(初始篇) 本篇博客学习自侯亮的博客.地址为: 红茶一杯话Binder 1 什么是Binder? 简单地说.Binder是Android平台上的一种跨进程交互技术. 该 ...