作为程序员一定要保持良好的睡眠,才能好编程

如何编写一个sh,sh基本语法

发布时间:2016-05-15

如何编写一个sh?

我其实是一个开发人员,不得不去做运维工作。我部署一台服务器要两天的时间,甚至有时候都搞不定。

花了一周的时间学习了linux,部署服务器,等。



这是扩展代码:http://www.xiaosongit.com/index/detail/id/364.html




今天我们来看看如何编写一个sh

新建一个 test.sh

touch test.sh



编辑test.sh

vim test.sh



#!/bin/bash


这是第一行必须要写的


建立shell 其实就是 把 一段代码放在这个文件中,依次去执行。


例如我写的这个sh,看代码

37.png

运行test.sh

sh test.sh

38.png

这里看到了 success ,证明sh运行成功



好,我们学习sh不只是要办这儿些事情,必须  循环、判断命令怎么写?


定义变量

LOGPATH=/usr/local/nginx.log/account.log

BACKPATH=/data

上面的LOGPATH 、BACKPATH 这都是我们定义好的变量

那么怎么使用这些变量


#LOGPATH=/usr/local/nginx/logs
#LOGPATH='/usr/local/nginx/logs'
LOGPATH="/usr/local/nginx/logs"
echo $LOGPATH
echo "$LOGPATH/access.log"
echo "${LOGPATH}"/a/b/c.log

定义变量,直接写变量的名称=变量的值


sh中连接字符串不需要加任何的连接符号,直接写即可。


要访问变量 :  $变量名       "$变量名"    "${变量名}"    加上双引号可以,但不能单引号中访问变量。


 39.png



字符串的连接。

echo $LOGPATH"/abbb.b.logs"
echo "${LOGPATH}/aabbdd.conf"
echo $LOGPATH/a/a/a/a/a.conf

40.png


上面是自定义变量和连接字符串。



问题:

name="song"

echo ${name}                     #这样可以打印出name的值,使用了花括号


echo $(name)         但不能使用小括号,这是不同的概念。


这是两种不同的语法 ,不要混淆。


echo  -n "code.........."     加上 -n后,后面的 echo 内容会和这一行连接在一起。 不会换行。


echo -e “code \n code \n”解析带语义的代码。




显示昨天的日期

date -d yesterday +"%Y%m%d%H%M"




显示带语义符号的代码

echo -e " choose number: \n 1、php5.2 \n 2、php5.3"

看看显示结果,就是换行。 \n 不就是换行嘛


43.png


如何读取数据:

read a

当运行sh的时候,read a 就会在等待状态,让用户输入数据,

输入完数据以后,把这个值 赋值给 a

下面可以通过变量去访问

echo $a

显示用户输入的数据。



if 语句怎么使用

44.png

if 后面的中括号中,前后必须加一个空格,否则报 command not found

这是 if  else   的语句。最后以fi结尾


代码如下

if [ $a=1 ];then

    code...

elif [ $a=2 ];then

    code...

else

    code...

fi



看一看case 如何使用


read data

case "$data" in

"create")

code....

;;

"add")

code....

;;

"edit")

code....

;;

"*")

code....

;;

esac


case.png


代码截图:

46.png


case的写法,通过read来获取值 ,这是case的基本格式,记住即可,
每一个值 通过 value)     ;;  通过这样的格式去分离
php通过 break; 而这里使用两个分号去分割。
default 使用* 去匹配,
最后通过esac结束。

case.sh.txt

这是代码最基本的写法,下载后,把.txt 这个后缀去掉。




exit 结束当前的程序。

exit

只要是exit就是退出,不执行后面的程序。

47.png


48.png

通过

sh b.sh

运行sh文件


#!/bin/bash
echo  "cuole"
exit
echo "youmeiyou"


exit后面的代码是不执行的。



sh中也是可以定义方法的,那么如何定义呢?

49.png


我把代码贴出来:


#!/bin/bash
LOGPATH=/usr/local/nginx/log/acceoss.log
getid(){
        echo $0
        echo $1
        echo $2
}
getid 1 $LOGPATH

50.png


sh fun.sh 执行代码 以上是显示的结果。





id -u 显示当前登录用户的id



r14.png


循环等待 read line


#!/bin/bash    
# Copyright 2013 Joe Walnes and the websocketd team.    
# All rights reserved.    
# Use of this source code is governed by a BSD-style    
# license that can be found in the LICENSE file.    
# For each line FOO received on STDIN, respond with "Hello FOO!".    
while read LINE    
do    
	echo "Hello $LINE!"    
done