shell解释:引用别人的话说:“Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。”linux
简而言之,shell是命令解释器以外的一种编程语言。shell
shell能够作什么:批处理、自动化管理、监控管理、日志数据处理、自动数据备份等等。编程
1)注释:#开头bash
2)命令:shell基本语法编程语言
3)变量:shell支持字符串变量和整数变量。函数
4)结构控制语句:流程控制语句ui
两种执行方式spa
1)sh shelltest设计
2)./shelltest日志
说明:两种执行方式的权限控制不同。
示例:
#!/bin/bash # 我是注释 :-e特殊字符(\a、\n)转义 echo -e "Hello World!\a\n" exit 0
定义变量:name=aa
说明:
引用变量:$name(表示引用name的值)
变量的数值计算:
语法:须要使用双层小括号括起来,模运算:% 幂运算:**
示例:实现a + b
#!/bin/bash a=10 b=20 echo $(($a+$b)) echo $((100+20-20*2))
./shelltest执行,结果为:
30 80
字符串操做:
${#string} : 计算长度 ${string:position} : 从position开始截取 ${string:position:length} : 从position开始截取length长度 ${string#substring} : 删除开始的字符串
示例:
${string#I*.} : 删除从I到.的全部字符(最短匹配) ${string##I*} : 删除开始I到.全部字符(最长匹配)
可使用:man test查看test的语法说明。
如下为test的几个基本使用:
-f:文件是否存在 -d:目录是否存在 -r:文件是否有读权限 -w:文件是否有写权限 -x:文件是否有执行权限
示例:
#!/bin/bash filename=/home/zhangsan test -f $filename && echo 'exist' || 'not exist'
经过./shelltest执行,会显示'not exist'
注意:
1)中括号中必须用空格隔开
2)中括号中的变量最好以双引号括起来
3)中括号中的常数,最好以单引号括起来
eg:
[ "$a" == "$b" ]&&echo 'yes' || echo 'no'
[ '12' == '10' ]&&echo 'yes' || echo 'no'
三种条件分支:单分支、双分支、多分支
1)单分支判断
语法:
if[];then echo 'aa' fi
示例:
#!/bin/bash filename=/home/asdf if[ test -f $filename ];then echo 'aa' fi
2)双分支判断
#!/bin/bash if[];then echo 'aa' else echo 'bb' fi
3)多分支判断
多分支判断有两种方式:if elif else方式、case in方式。
第一种:if elif else方式
示例:
#!/bin/bash if[];then echo 'aa' elif echo 'bb' elif echo 'cc' fi
第二种:case in方式
语法:
case $name in 1);; echo 'aa' esac
多分支示例:
从终端接收一个输入参数,而后进行条件判断。(read:接收用户输入)
#!/bin/bash echo '输入一个值:' read number if[ $number == 1 ];then echo '2' elif[ $number == 2 ];then echo '2' else echo '错误' fi
示例,查看硬件信息脚本:
#!/bin/bash echo '输入一个值:' read hd if[ $hd == cpu ];then cat /proc/cpuinfo elif[ $hd == mem ];then cat /proc/meminfo elif[ $hd == hard ];then df -h else echo '错误' fi
case in方式的示例:
#!/bin/bash echo '输入一个值:' read number case $number in 1) echo '1';; 2) echo '2';; *) echo '错误';; esac
循环语句有三种方式:while do循环、until do循环、for循环
说明:[]中要使用如下转义符号;(())不须要转义。shell推荐使用[]。
[] : -eq -ne -gt -ge -lt -le
(()): == != > >= < <=
说明:示例中[ $i -eq 5 ] 等价于 (($i==5))。
#!/bin/bash i=10 while [ $i -eq 5 ];do echo $i; ((i--)); done;
#!/bin/bash i=10 until (($a<0));do echo $i; ((i--)); done;
#!/bin/bash for((i=1;i<=10;i++));do echo $i done;
参考示例,文件名为shelltest:
#!/bin/bash function print(){ echo '$1' } case $1 in "one") print 1;; "two") print 2;; *) print '错误';; esac
执行的时候能够直接经过控制台直接传参:
$ ./shelltest one
如下执行结果为:2
$ ./shelltest two
以上为shell脚本的基本使用,熟练使用后,再结合linux其余基本命令扩展一下,就能基本掌握shell脚本编程了。