在linux系统中,我们一般都是用C语言写服务端程序,但是一般我们不直接启动这个程序,而是通过一个shell脚本启动和关闭(需要设置一些环境变量和防止打开多个改程序,打开多个后需要找到pid才能关闭)
那么shell是什么呢?
说白了shell是操作系统提供给我们的一种语言,用来将用户的命令输送到内核中执行
1首先我新建一个test2.sh,存放下面的一段shell代码
2保存后,修改这个shell为可执行文件 chmod +x test2.sh
- #! /bin/sh
- #定义变量
- name=张三
- echo $name
- echo "参数:$*"
- echo "参数个数$#"
输出结果:
下面分别介绍字段的含义
第一行:一般默认第一行都是上面这段#! /bin/sh,通知系统用/bin/sh来执行下面的程序。
以“#”开头的行代表注释
echo代表输出后面一段话的到用户界面
$name代表使用了name这个变量(定义shell变量在下面介绍)
$* 代表所有的参数(我们在shell命令后面加了hello 和world两个参数)
$#代表参数的个数
有了初步的认识,我们就开始踏入shell编程吧!
定义shell变量:(注意等号左边右边不可以有空格)
shellname=value
使用shell变量
$shellname
代表第几个参数
例如$1代表第一个参数,按照上面的代码就是hello
还有下面的一些$符号的使用。
可能会对$?有一点费解,例如我们在shell中调用了一个C语言程序mydemo,其中mydemo这个主函数会返回100(这里不写c代码了)
- #! /bin/sh
- ./mydemo
- echo $?
shell输出值:100
也可以是执行一段shell函数,获取该函数的返回值(最后讲函数说到)
如果我们想在shell中执行一段命令,并将该命令的值存放到一个变量中,就要用到` `符号(在1数字旁边)
- #! /bin/sh
- result=`ls`
- echo result=$result
ls命令显示当前文件夹下有哪些文件
输出结果:result=test.sh ...
我们在运行shell的时候,可能需要我们输入一些数据,除了带参数的方式我们还可以使用read进行读
- #! /bin/sh
- echo "please enter a"
- read a
- echo "please enter b"
- read b
- echo "a=$a,b=$b"
输出结果:
read命令读取一个输入行,直至遇到换行符。
行尾的换行符在读入时将被转换成一个空字符
如果read命令后有变量名,输入内容赋给该变量。
如果read命令后未跟变量名,读入的行将被赋值给内置变量REPLY。
shell也会像高级语言支持if,while等计算
格式:(fi代表这个if结束)
- if (test condition) then
- commands
- else
- commands
- fi
- #! /bin/sh
- if (test "start" = "${1}" ) then
- echo "start"
- else
- echo "end"
- fi
格式:
- if [ -option file]; then
- commands
- else
- commands
- fi
代码:
- #! /bin/sh
- if [ -d "${1}" ]; then
- echo exist
- else
- echo notexist
- fi
运行
查看dir1文件夹是否存在,因为我创建了一个,所以是存在的。
其中还有一些其他选项
代码格式:([右边和]左边都要有一个空格哦,done代表循环结束,当条件不成立时候循环结束)
- while [ expr ];
- do
- commands
- done
代码demo(大家可以自己验证哈)
- #! /bin/sh
- tmp=0
- while [ "$tmp" != "5" ];
- do
- echo "curtmp=$tmp"
- tmp=$[ $tmp + 1 ]
- done
同样也支持像switch那样的分支选择语句的
代码格式:(如果有一个pattern匹配到跟string内容一样,执行这里面的内容,否则执行最下面的*分支,;;两个分号代表退出case循环,跟C语言的break)
- case "string" in
- pattern_1)
- commands
- ;;
- pattern_2)
- commands
- ;;
- *)
- commands
- ;;
- esac
代码格式:(会遍历这个list数组,将当前值存放到varname变量中,后面的分号也是必不可少的哦
- for varname in list ;
- do
- commands
- done
- #! /bin/sh
- for name in $*;
- do
- echo "$name"
- done
- exit code
- function funcname
- {
- commands
- }
- #! /bin/sh
- function fun1
- {
- echo "第一个参数:$1"
- echo "第二个参数: $2"
- return 100
- }
- fun1 3 4
- echo "函数返回值:$?"
- #! /bin/sh
- me=`whoami`
- PID=`ps -u $me |grep mydemo|awk {'print $1'}`
- if( test "$PID" = "" ) then
- `mydemo`
- fi
来源: http://www.cnblogs.com/nfcm/p/7743418.html