1.shell 简单demo
shelldemo.sh
#!/bin/bash
#指定shell解析器
echo "hello shell"
执行shell的几种方式:
- /bin/bash shelldemo.sh
- /bin/sh shelldemo.sh
- ./shelldemo.sh
前两种方式是使用bash和sh命令进行执行,第三种是直接执行shell脚本,如果shelldemo.sh在当前用户下没有执行权限,则会报没有权限执行。
查看linux提供的shell解析器:
cat /etc/shells
其中sh是bash的链接
####2.变量
- 常用的系统变量
$HOME、$PWD、$SHELL、$USER,分别代表家目录,当前目录,shell执行解析器,当前用户名
-
自定义变量
声明变量:变量=值 #中间不能有空格 撤销变量:unset 变量 声明静态变量:readonly 变量,一个变量声明后被执行此命令后就不能够被改变值了 变量默认是字符串类型的,不能够直接进行计算 声明为全局变量: export 变量; export $PATH=/usr/local/kafka/bin:$PATH
-
特殊变量
$n: n是数字,$0代表脚本的名称,$1-9代表执行脚本的时候的参数。例如写shell中echo "$0 $1 $2"。 $#: 获取执行脚本输入的参数的个数。 $*: 所有参数 $@: 所有参数,但是分开的 $?: 上一次执行脚本的返回状态,如果为0的话则执行正确,否则执行不正确。
3.运算符,条件判断,循环
$((运算))或$[运算式]
expr +,-,\*,/,% ;运算符之间要有空格
```shell
expr 2 + 3
expr 5 - 9
S=$( (2+3)*4 )
echo $S
```
[ condition ] 条件判断
```shell
[ 3 -lt 9] true
[ zzu ] true
[ 3 -le 9 ] true
[ 3 -eq 9] false
[ 3 -gt 9 ] false
[ 3 -ge 9 ] false
[ 3 -ne 9 ] false
[ -r xxx.sh ] 是否有读权限
[ -w xxx.sh ] 是否有写权限
[ -x xxx.sh ] 是否有执行权限
[ -f xxx.sh ] 是否是个文件
[ -e xxx.sh ] 是否存在
[ -d xxx.sh ] 是否是个目录
&& 并
|| 或
```
条件判断
```
if [ 3 -eq 9 ];then
echo "3==9"
fi
--------------------------------
if [ 3 -eq 9 ];then
echo "3==9"
elif [ 3 -lt 9 ];then
echo "3<9"
fi
```
case语句
```
case $1 in
"start")
echo "start redis"
;;
"stop")
echo "stop redis"
;;
*)
echo "no operator"
;;
esac
```
for循环
```
for i in $*
do
echo $i
done
```
while循环
```
#/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s
```
4.工具命令
-
cut
cut:可将文件中文本的每一行以一定字符串的拆分成不同的段,然后显示这些段cut.txt文件内容 ------------------------------ yang_pu hong_kou bao_shan pu_dong pu_tuo ------------------------------ cut命令的常用参数有-d -f -d指定每行的分割符,分隔符只能有一个, -f指定显示的列 cut -d "_" -f 1 cut.txt #指定分割符为_,只显示第一列
结果
- sed
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
-
awk
awk对文件以行进行读取,并以模式进行匹配,匹配后可获取特定的值。常用参数有 -F 指定分割符
使用awk获取以pu开头的行
####5.redis服务脚本
#!/bin/sh
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/data/redis/redis.pid
CONF="/data/redis/redis.conf"
REDISPORT="16379"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
status)
PID=$(cat $PIDFILE)
if [ ! -x /proc/${PID} ]
then
echo 'Redis is not running'
else
echo "Redis is running ($PID)"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Please use start, stop, restart or status as first argument"
;;
esac
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。