下面是最近学习shell script的一些知识点总结

***博客园-邦邦酱好***

 

1.介绍
shell是一个文字接口,让我们与系统沟通。shell script就是针对shell所写的脚本。
它就像是早期dos年代的批处理文件.bat,所以shell script可以看成是一个程序也可以是一个批处理脚本,它利用shell与相关工具指令,不需要编译即可执行,可以帮助系统管理员快速的管理好主机。

shell script用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上,就不够好了,因为Shell scripts的速度较慢,且使用的CPU资源较多,造成主机资源的分配不良

2.简单的语法
test.sh
#!/bin/bash      #宣告这个文档内的语法使用bash的语法,程序被执行时,加载bash的相关配置文件
#  以#开头的是批注
#  接着说明script的:1.内容与功能 2.版本信息 3.作者与联系方式 4.建档日期 5.历史记录 等等
echo -e "Hello World! \a \n"
exit 0  #中断程序,并回传一个数值给系统

3.对谈式脚本:变量内容由用户决定
#!/bin/bash
read -p "Please enter your firstname:" firstname
read -p "Please enter your lastname:" lastname
echo -e "\nYour full name is:$firstname $lastname"

4.脚本执行方式
(1)利用sh/bash来执行脚本:在子程序中执行
-->当子程序完成后,在子程序内的各项变量或动作将会结束而不会传回到父程序中
(2)利用source/.来执行脚本:在父程序中执行
-->脚本在父程序中执行,各项变量或动作仍然留在父程序中
查看文件权限:ls -l test.sh
如果不够权限,可以这样赋予执行的权限:chmod a+x test.sh
(要取得root账户:su root)

5.利用test命令的测试功能
(1)文件类型的判断
test [-efd] file
-e:该档名是否存在
-f:该档名是否存在且为file类型
-d:该文件名是否存在且为diretory类型

(2)文档权限的判断
test [-rwx] file
-r:该档名是否存在且具有可读权限
-w:该档名是否存在且具有可写权限
-x:该档名是否存在且具有可执行权限
--->test -e /dmtsal && echo "exist" || echo "not exist"

(3)两个文档之间的比较
test file1 -nt file2
-nt:判断file1是否newer than file2
-ot:判断file1是否older than file2
-ef:判断两个文档是否指向同一个inode

(4)两个整数之间的比较
test n1 -eq n2
-eq:equal
-ne:not equal
-gt:greater than
-lt:less than
-ge:greater than or equal
-le:less than or equal

(5)字符串的判断
test -z string:string是否为空
test -n string:string是否为非空
test str1 = str2:str1是否等于str2
test str1 != str2:str1是否不等于str2

(6)多重条件判断
test -r filename -a -x filename
-a:and,两种情况同时成立
-o:or,两种情况之一成立
!:反相状态,如test ! -x file,当file不具有x时,返回true

6.利用判断符合[]
(1)比如[ -z "$HOME" ];echo $?
注意:使用[]来进行判断时中括号内的每个组件都要有空格符分隔,变量或常数要用双引号括起来:
[ "$HOME" == "$MAIL" ]
(2)中括号常用在条件判断式中
[ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK,continue" && exit 0
也可以写成:["$yn" == "Y"] || ["$yn" == "y"]

7.shell script的默认变量($0,$1)
filename opt1 opt2 opt3 opt4
执行的脚本filename对于$0这个变量,op1对应$1,opt2对应$2。。。
除此以外,还有以下特殊变量:
$#:代表后接的参数个数
$@:代表["$1" "$2" "$3" "$4"]
$*:代表["$1 $2 $3 $4"]

8.shift:造成参数变量号码的偏移
vi test.sh s1 s2 s3 s4 s5 s6
echo "shift前共有6个变量"
shift
echo "shift后共有5个变量,分别是s2 s3 s4 s5 s6"
shift 3
echo "shift后共有2个变量,分别是s5 s6"

9.条件判断式(若等号两边有空格,必须[(空格)条件(空格)])
if [条件判断式]; then
    条件成立时的命令内容
fi  #结束if语句

10.复制条件判断式
(1)
if [条件判断式一]; then
    条件成立时的命令内容
else
    条件不成立时的命令内容
fi  #结束if语句

(2)
if [条件判断式一]; then
    条件一成立时的命令内容
elif [条件判断式二]; then
    条件二成立时的命令内容
else
    条件一二不成立时的命令内容
fi  #结束if语句

10.利用case...in...esac判断
case $variablename in
"first-variable-content")
    操作
;;
"second-variable-content")
    操作
;;
*)
    操作
;;
esac

11.函数function功能
由于shell script的执行方式是由上到下,由左到右,所以function的设定一定要在程序的最前面,这样在执行时才能被找到。
function fname(){
    程序段
}
如:
function printit(){
    echo "Your choice is $1"
}

printit 2
--->结果是:Your choice is 2
(这里的$1是指函数调用时后接的参数,跟调用脚本时:./test.sh para1的$1是不一样的)

12.循环
while [ 条件判断式 ]
do
    程序段
done
当condition成立时,就进行循环,直到条件不成立

或者
until [ condition ]
do
    程序段
done
当condition成立时,就终止循环,否则持续进行循环

或者
for var in con1 con2 con3 ...
do
    程序段
done
如:
network="192.168.1"
for sitenu in $(seq 1 100)  #seq为sequence连续的缩写
do
    ping -c 1 -w 1 ${network}.${sitenu} &> /dev/null && result=0|result=1
    if [ "result" == 0 ];then
    echo "Server ${network}.${sitenu} is Up"
    else
    echo "Server ${network}.${sitenu} is Down"
    fi
done

或者
for...do...done的数值处理
for(( 初始值;限制值;执行步阶 ))
do
    程序段
done
如:
s=0
for((i=1;i<100;i=i+1))
do
    s=$(($s+$i))
done

13.shell script的追踪与debug
sh [-nvx] scripts.sh
-n:不要执行脚本,仅查询语法的问题
-v:在执行脚本前,先输出脚本的内容
-x:将使用到的脚本内容显示到屏幕上

linux--shell script的更多相关文章

  1. 一个改动配置文件的linux shell script

    不久以前,以前搜到一篇博客是读取配置文件的,http://www.cnblogs.com/bo083/archive/2012/11/19/2777076.html,用到如今,感觉十分方便.感谢作者. ...

  2. Linux shell script All In One

    Linux shell script All In One refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  3. Linux Shell Script目录

    目录 Linux Shell基础 开始Shell编程 代码 示例代码查看:https://github.com/Furzoom/demo-C/tree/master/src/shell

  4. Linux shell Script初识

    shell secript: 执行方式的差异: ./ sh执行都是在创建一个子程序来执行,只会继承环境变量, 其中的变量如果export声明,子程序的子程序会继承,不会升级为环境变量 source 的 ...

  5. fastq to tasta using linux shell script

    #!/bin/bash usage() { echo " "; echo "############################################### ...

  6. (copy) Shell Script to Check Linux System Health

    source: http://linoxide.com/linux-shell-script/shell-script-check-linux-system-health/ This article ...

  7. Shell script for logging cpu and memory usage of a Linux process

    Shell script for logging cpu and memory usage of a Linux process http://www.unix.com/shell-programmi ...

  8. (原创)鸟哥linux学习script shell相关笔记

    在使用鸟哥linux进行script shell学习的过程中碰到一些不太明白的知识点,在这里进行一些记录 1. [root@www scripts]# vi sh03.sh #!/bin/bash # ...

  9. linux基础之Shell Script入门介绍

    本文介绍下,学习shell script编程的入门知识,通过几个入门实例,带领大家走进shell script的神圣殿堂,呵呵,有需要的朋友参考下. 本文转自:http://www.jbxue.com ...

  10. “windows的批处理”与“Linux的shell script”的类比学习

    从2005年开始,做了将近10年的系统维护,先是做网络接入管理,然后做网络安全与审计,然后做服务器管理等整个网络系统的运营管理:现在又兼着做一些Linux下的视频监控系统的软硬件维护.过程中遇到太多重 ...

随机推荐

  1. Unity 3D 文件导入出错

    Unity 3D 文件导入出错 安装unity 时我选择了free版的,打开已有项目时出现例如以下错误提示 解决的方法: 先把要导入的文件先复制到unity3d安装文件夹下相应的文件夹内,之后再返回u ...

  2. ubuntu 13.10 Rhythmbox不能播放mp3 和中文乱码的问题

    1.ubuntu 13.10 Rhythmbox不能播放mp3的解决方法 软件中心搜索(ubuntu额外的版权受限软件)不带括号 2.中文乱码问题解决方法: 终端顺序操作 : 1.  sudo ged ...

  3. Eclipse设置Android Logcat输出字体大小

    Window -> Preferences -> Android -> Logcat -> Display Font:点击"Change"button 如图 ...

  4. HotelIInventory项目小结

    最近参与了HotelIInventory这个项目的一个模块的开发.经验不足,对Sql脚本的编写能力还需要提高,这个模块的Sql语句大多是组长替我写的,如果靠我自己来写,我绝对是没有能力完成工作的,在此 ...

  5. 基于JVM规范的并发编程解决方案

    在并发的世界里,选择合适的状态处理方法将对并发性和正确性起到决定性的影响.这方面可选的方法有:共享可变性.隔离可变性以及完全不可变性. 对于并发问题来说最好的解决方法是从根本上消灭它而不是花很多时间解 ...

  6. struts2官方演示程序总结struts2-blank

    struts-2.2.3.1-all\struts-2.2.3.1\apps\struts2-blank总结 1.Html可以访问action  ,如下:    < head  >     ...

  7. sap的示例代码

    sap的示例代码查看1.在SE38环境下的程序名输入栏输入'DEMO*'后按F4,你可以查到SAP所有的DEMO示例程序,好好看看,你会学到很多ABAP功能的实现方法.2.运行“ABAPDOCU”T- ...

  8. Network Panel说明

    Chrome Developer Tools:Network Panel说明   官方资料:Chrome Developer Tools: Network Panel 一.chrome Develop ...

  9. POJ1422 最小路径覆盖入门

    题意:DAG求最小路径覆盖. 注意:二分匹配只试用于求DAG的最小路径覆盖, 有环就不行,具体可以理解证明. 对n个点进行拆点,分成左右两排点,对于边<u, v> 建  <u', v ...

  10. win8vs2012创建自带sqlServer数据库出错

    以前写程序的时候,一直使用的sqlite,今天心血来潮,想用vs2012连接自身带的数据库,结果就出现错误: 啊,看到这个错误,咱赶紧上网搜搜,啊,有关的日志也是比较少的,经过一番苦战之后,终于好了, ...