shelldemo.shlinux
#!/bin/bash #指定shell解析器 echo "hello shell"
执行shell的几种方式:redis
前两种方式是使用bash和sh命令进行执行,第三种是直接执行shell脚本,若是shelldemo.sh在当前用户下没有执行权限,则会报没有权限执行。shell
查看linux提供的shell解析器:bash
cat /etc/shells
其中sh是bash的连接编辑器
####2.变量工具
$HOME、$PWD、$SHELL、$USER,分别表明家目录,当前目录,shell执行解析器,当前用户名
自定义变量spa
声明变量:变量=值 #中间不能有空格 撤销变量:unset 变量 声明静态变量:readonly 变量,一个变量声明后被执行此命令后就不可以被改变值了 变量默认是字符串类型的,不可以直接进行计算 声明为全局变量: export 变量; export $PATH=/usr/local/kafka/bin:$PATH
特殊变量rest
$n: n是数字,$0表明脚本的名称,$1-9表明执行脚本的时候的参数。例如写shell中echo "$0 $1 $2"。 $#: 获取执行脚本输入的参数的个数。 $*: 全部参数 $@: 全部参数,可是分开的 $?: 上一次执行脚本的返回状态,若是为0的话则执行正确,不然执行不正确。
$((运算))或$[运算式] 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 ```
cut
cut:可将文件中文本的每一行以必定字符串的拆分红不一样的段,而后显示这些段code
cut.txt文件内容 ------------------------------ yang_pu hong_kou bao_shan pu_dong pu_tuo ------------------------------ cut命令的经常使用参数有-d -f -d指定每行的分割符,分隔符只能有一个, -f指定显示的列 cut -d "_" -f 1 cut.txt #指定分割符为_,只显示第一列
结果server
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