如何编写一个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,看代码
运行test.sh
sh test.sh
这里看到了 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中连接字符串不需要加任何的连接符号,直接写即可。
要访问变量 : $变量名 "$变量名" "${变量名}" 加上双引号可以,但不能单引号中访问变量。
字符串的连接。
echo $LOGPATH"/abbb.b.logs"
echo "${LOGPATH}/aabbdd.conf"
echo $LOGPATH/a/a/a/a/a.conf
上面是自定义变量和连接字符串。
问题:
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 不就是换行嘛
如何读取数据:
read a
当运行sh的时候,read a 就会在等待状态,让用户输入数据,
输入完数据以后,把这个值 赋值给 a
下面可以通过变量去访问
echo $a
显示用户输入的数据。
if 语句怎么使用
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的写法,通过read来获取值 ,这是case的基本格式,记住即可,
每一个值 通过 value) ;; 通过这样的格式去分离
php通过 break; 而这里使用两个分号去分割。
default 使用* 去匹配,
最后通过esac结束。
这是代码最基本的写法,下载后,把.txt 这个后缀去掉。
exit 结束当前的程序。
exit
只要是exit就是退出,不执行后面的程序。
通过
sh b.sh
运行sh文件
#!/bin/bash
echo "cuole"
exit
echo "youmeiyou"
exit后面的代码是不执行的。
sh中也是可以定义方法的,那么如何定义呢?
我把代码贴出来:
#!/bin/bash
LOGPATH=/usr/local/nginx/log/acceoss.log
getid(){
echo $0
echo $1
echo $2
}
getid 1 $LOGPATH
sh fun.sh 执行代码 以上是显示的结果。
id -u 显示当前登录用户的id
循环等待 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