shell学习-转自http://c.biancheng.net/cpp/shell/
2015-10-17 22:07
513 查看
1、Hello world
**需要chmod +x test01.sh //添加执行权限
运行时需要“./test01.sh”,才能执行。
2、读取输入
3、变量定义
特殊变量列表
4、算术运算
注意:expr两边的符号只能是这样,if里边的括号,必须有空格,教训!!
5、关系运算
字符串运算符列表
布尔运算符列表
关系运算符列表
6、文件判断
文件测试运算符列表
7、流程语句
if-else语句
if-else经常与test一起使用,与[]类似
while语句
util语句,判断与while相反
for语句
case语句
流程控制:break continue
8、函数
函数可以传参,类似与接收执行脚本接收参数。
特殊变量说明:
$#传递给函数的参数个数。
$*显示所有传递给函数的参数。
$@与$*相同,但是略有区别,请查看Shell特殊变量。
$?函数的返回值。
$n获取指定参数,最好使用${n}
9、包含
Shell 中包含脚本可以使用:
. filename
或
source filename
两种方式的效果相同,简单起见,一般使用点号(.),但是注意点号(.)和文件名中间有一空格。
10、输出(入)重定向
???
(如有冒犯,请联系删除)
--来自 http://c.biancheng.net/cpp/shell/ 感谢“C语言中文网”
#!/bin/bash echo "Hello World!"
**需要chmod +x test01.sh //添加执行权限
运行时需要“./test01.sh”,才能执行。
2、读取输入
#!/bin/bash # Author : net echo "What is your name?" read PERSON echo "Hello, $PERSON" //脚本使用 read 命令从 stdin 获取输入并赋值给 PERSON 变量,最后输出
3、变量定义
#!/bin/bash your_name="mozhiyan" #变量输出可以不加括号 echo $your_name #已定义变量可以再次赋值 your_name="nashisha" #readonly your_name 将变量置为只读 #也可以加,最好加上 echo ${your_name} #循环 for skill in Ada Coffe Action Java Shell do echo "I am good at ${skill}Script" done
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |
#!/bin/bash #算术运算 a=10 b=20 val=`expr $a + $b` echo "a + b : $val" val=`expr $a - $b` echo "a - b : $val" val=`expr $a \* $b` echo "a * b : $val" val=`expr $b / $a` echo "b / a : $val" val=`expr $b % $a` echo "b % a : $val" if [ $a == $b ] then echo "a is equal to b" fi if [ $a != $b ] then echo "a is not equal to b" fi
注意:expr两边的符号只能是这样,if里边的括号,必须有空格,教训!!
5、关系运算
#!/bin/sh a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a is equal to b" else echo "$a = $b : a is not equal to b" fi if [ $a != $b ] then echo "$a != b : a is not equal to b" else echo "$a != $b : a is equal to b" fi if [ -z $a ] then echo "-z $a : string length is zero" else echo "-z $a : string length is not zero" fi if [ -n $a ] then echo "-n $a : string length is not zero" else echo "-n $a : string length is zero" fi if [ $a ] then echo "$a : string is not empty" else echo "$a : string is empty" fi
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否为0,不为0返回 true。 | [ -z $a ] 返回 true。 |
str | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true。 |
运算符 | 说明 | 举例 |
---|---|---|
! | 非运算,表达式为 true 则返回 false,否则返回 true。 | [ ! false ] 返回 true。 |
-o | 或运算,有一个表达式为 true 则返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 与运算,两个表达式都为 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 true。 |
-ne | 检测两个数是否相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
操作符 | 说明 | 举例 |
---|---|---|
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | [ -b $file ] 返回 false。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 | [ -b $file ] 返回 false。 |
-d file | 检测文件是否是目录,如果是,则返回 true。 | [ -d $file ] 返回 false。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | [ -f $file ] 返回 true。 |
-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 | [ -g $file ] 返回 false。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 | [ -k $file ] 返回 false。 |
-p file | 检测文件是否是具名管道,如果是,则返回 true。 | [ -p $file ] 返回 false。 |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 | [ -u $file ] 返回 false。 |
-r file | 检测文件是否可读,如果是,则返回 true。 | [ -r $file ] 返回 true。 |
-w file | 检测文件是否可写,如果是,则返回 true。 | [ -w $file ] 返回 true。 |
-x file | 检测文件是否可执行,如果是,则返回 true。 | [ -x $file ] 返回 true。 |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 | [ -s $file ] 返回 true。 |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | [ -e $file ] 返回 true。 |
if-else语句
if [ $a == $b ] then echo "a is equal to b" elif [ $a -gt $b ] then echo "a is greater than b" elif [ $a -lt $b ] then echo "a is less than b" else echo "None of the condition met" fi
if-else经常与test一起使用,与[]类似
num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then echo 'The two numbers are equal!' else echo 'The two numbers are not equal!' fi
while语句
while command do Statement(s) to be executed if command is true done
util语句,判断与while相反
until command do Statement(s) to be executed until command is true done
for语句
for 变量 in 列表 do command1 command2 ... commandN done
case语句
case 值 in 模式1) command1 command2 command3 ;; 模式2) command1 command2 command3 ;; *) command1 command2 command3 ;; esac
流程控制:break continue
8、函数
#!/bin/bash # Define your function here Hello () { echo "Url is http://see.xidian.edu.cn/cpp/shell/" } # Invoke your function Hello
函数可以传参,类似与接收执行脚本接收参数。
带参数的函数示例: #!/bin/bash funWithParam(){ echo "The value of the first parameter is $1 !" echo "The value of the eleventh parameter is ${11} !" echo "The amount of the parameters is $# !" # 参数个数 echo "The string of the parameters is $* !" # 传递给函数的所有参数 } funWithParam 1 2 3 4 5 6 7 8 9 34 73
特殊变量说明:
$#传递给函数的参数个数。
$*显示所有传递给函数的参数。
$@与$*相同,但是略有区别,请查看Shell特殊变量。
$?函数的返回值。
$n获取指定参数,最好使用${n}
9、包含
Shell 中包含脚本可以使用:
. filename
或
source filename
两种方式的效果相同,简单起见,一般使用点号(.),但是注意点号(.)和文件名中间有一空格。
10、输出(入)重定向
???
(如有冒犯,请联系删除)
--来自 http://c.biancheng.net/cpp/shell/ 感谢“C语言中文网”
相关文章推荐
- android开源框架android-async-http使用案例介绍
- ListView显示网络数据出现数据堆积问题,求助!求助!!求助!!!
- 真实流量压测工具 tcpcopy应用浅析
- 以太网及IP数据报,tcp数据报格式分析
- java网络编程之 UDP的使用
- 基于HttpClient的java后台访问URL
- qt与java实现简单的网络通信
- Mina、Netty、Twisted一起学习(三):TCP前缀固定大小的消息(Header)
- 《TCP/IP详解 卷一》读书笔记-----动态路由协议
- UDP TCP区别
- JAVA基础学习之Http(含JSON)网络编程
- http-web基础
- 网络抓包教程
- SQLCONNECTION使用HTTP通信协议和中间件连接
- BroadcastReceiver之动态注册监听网络状态变化
- ASP.NET WebAPI 06 HttpMessageHandler管道
- http网站上传文件大小问题【没测试过】
- TCP/IP协议族-----10、搬家IP
- C# 通过豆瓣网络编程API获取图书信息
- C++异常安全 http://www.cnblogs.com/qinfengxiaoyue/p/3713762.html