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