Shell脚本 变量 语句 表达式

  • 常见的解释器
#!/bin/sh #不推荐(了解)
#!/bin/bash
#!/usr/bin/python
#!/bin/awk

#!后跟的字符表示要启动的程序,该程序读取该文件执行。
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行

  • shell 函数
myShellName () {
  command1
}

函数调用  myshellname 
变量  $myvar
如果变量的结果和其它字符串连接在一起时  为了便于区分需
要将${变量名}xxx
echo ${name}isverygood
$?:上一个命令的退出状态  0:成功   非0:失败

read NUM  #输入命令 行从输入设备读入内容
echo "1+1=$NUM"
# 变量 定义变量时,变量名不用加符号$  变量名和等号之间不能有空格
variableName="variableName"
使用一个定义过的变量,只要在变量名前面加符号$
str="hello world"
echo $str
echo ${str}  # 变量名外面的花括号是可选的 加不加都行,加花括号是为了帮助解释器识别变量的边界
# 变量可以重新赋值:
str="hello world"  
str="hello world1"
# 在变量前面加readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变
readonly str

str="hello world1"
echo ${str}
# 使用 unset 命令可以删除变量  unset 不能删除只读变量
str="hello world"
unset str 

# 特殊变量
$0  #当前脚本的文件名 
$n  #传递给脚本或函数的参数。n 是一个数字,表示第几个参数
$*   #传递给脚本或函数的所有参数
$?    #上个命令的退出状态,或函数的返回值。
$$   # 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

  • 表达式
逻辑与: 只有两个表达式都为真时,结果才为真。
command1 && command2
逻辑或:只少有一个为真,结果就为真。
command1 || command2
格式:
[ 表达式 ]    
test 表达式  -d 是否为存在的目录 -f 是否为存在的文件 -e 是否存在
[[ 表达式 ]]
# -gt 大于 -lt 小于 -eq 等于 -ge 大于等于 -le 小于等于
test 3 -gt 2  echo $?
 [ 3 -gt 2 ]   echo $?
[]和内容之间一定要有空格,否则抛错。

分支语句  格式一 
if  [  条件判断  ]
then
//命令
fi
格式二 
if  [  条件判断  ]; then
//命令
fi  将if反过来写,就成为fi  结束if语句  
双分支结构
if [ 条件1 ];then  
条件1成立执行,指令集1 
else
条件1不成执行指令集2 
fi
例子:
if [ $1 -gt 3 ];then
   echo "$1 > 3 is true"
else
   echo "$1 <= 3 is true"
fi

判断用户输入的是哪个数
read -p "please input a number[1,7]:" num
case $num in
1)
   echo "Mon"
;;
2)
   echo "Tue"
;;
3)
   echo "Wed"
;;
4)
   echo "Thu"
;;
5)
   echo "Fir"
;;
[6-7])
   echo "Weekend"
;;
*)
   echo "please input [1,7]"
;;
esac

while循环语句 
例子:
while true
do
 # 打印系统的负载日志
uptime
# 休眠2秒
sleep 2
done


i=$((i+1)) #运算结果为变量赋值可以使用$(( … ))
let i=$i+1 #运算结果为变量赋值可以使用$(( … ))

shell 脚本检查
sh -n script.sh   -n :不执行script,仅查询语法的问题; 

  • 定向输出
将一个命令执行结果输出到一个文件中
echo “hello world”  > hello.txt   # > 会覆盖之前内容
echo "hello world" >> hello.txt   # >>表示追加到文件尾

  • 字符串
在Shell中最常用的就是字符串和数字,字符串可使用单引号也可以使用双引号
双引号里可以有变量,单引号则原样输出
双引号里可以出现转义字符,单引号则原样输出  单引号字串中不能出现单引号,而双引可以

DATE=`date`  #date本身是一个命令,可以输出当前系统的时间 注意这里用的是反引号,而不是单引号
= 检测两个字符串是否相等,相等返回 true
!= 检测两个字符串是否相等,不相等返回 true。
-z 检测字符串长度是否为0,为0返回 true。
-n 检测字符串长度是否为0,不为0返回 true
str 检测字符串是否为空,不为空返回 true

你可能感兴趣的:(服务器,linux,运维,服务器)