2

变量

Shell 变量主要分为三种:自定义变量、系统变量、预定义变量。

自定义变量:

命名规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。
  • 变量名和等号之间不能有空格

使用变量:

your\_name\="lala" 
echo $your\_name
echo ${your\_name}

{}可以不加

只读变量:使用readonly

#!/bin/bash myUrl\="http://www.google.com"  
readonly myUrl

删除变量
unset variable\_name

系统变量

系统变量是指默认就存在的,主要有:

  • HOME:用户主目录
  • PATH:系统环境变量 PATH
  • TERM:当前终端
  • UID:当前用户 ID
  • PWD:当前工作目录,绝对路径

预定义变量

预定义变量常用来获取命令行的输入,主要有:

  • $0:脚本文件名
  • $1-9:第 1-9 个命令行参数名
  • $#:命令行参数个数
  • $@:所有命令行参数
  • $*:所有命令行参数
  • $?:前一个命令的退出状态,可用于获取函数返回值
  • $$:执行的进程 ID

$@”用于创建一个包含所有参数的列表。下面程序是用 for 语句来顺次处理所有参数时就会用到它。

1 #!/bin/sh
2
3 echo $0
4 for item in "$@"; do
5         echo $item
6 done

运算符

可以采用下面4中调用方式

#!/bin/bash
m=1 
m=$\[ m + 1 \] 
m=\`expr $m + 1\` 
let m=m+1 \# 注意 + 号左右不要加空格
m=$(( m + 1 )) 

语句

if语句

if [ 条件判断式 ] 
    then 程序 
        elif [ 条件判断式 ] 
        then 程序 
fi

例子:
判断语句的3种写法

 1 #!/bin/sh
 2
 3 message="Hello"
 4
 5 if test "$message" = "Hello"; then
 6         echo "Hello World"
 7 fi
 8
 9 if [ "$message" = "Hello" ]; then
10         echo "Hello World"
11 fi
12
13 if [[ $message == "Hello" ]]; then
14         echo "Hello World"
15 fi

用于字符串的比较:
字符串1 ==字符串2:字符串匹配

字符串1 !=字符串2:字符串不匹配

-z字符串:字符串为空

-n字符串:字符串不为空

字符串== 模式:字符串与模式相匹配

字符串!= 模式:字符串与模式不匹配

用于数组的比较:
数值1 -eq数值2:数值相等(equal)

数值1 -ne数值2:数值不相等(not equal)

数值1 -lt 数值2:数值1小于数值2(less than)

数值1 -le 数值2:数值1小于或等于数值2(less or equal)

数值1 -gt 数值2:数值1 大于数值2(greater than)

数值1 -ge 数值2:数值1 大于或等于数值2(greater or equal)

用于文件检查:
-e文件名: 该文件存在

-d文件名: 是目录

-h文件名: 是符号链接

-f文件名: 是常规文件

用于条件的逻辑运算
条件1&&条件2:两者都成立

条件1 ||条件2:某一方(或两者)成立

! 条件:条件不成立

true:始终成立

false:始终不成立

case语句

case $ 变量名 in  
“值 1”) 执行程序1;; 
“值 2”) 执行程序2;; 
esac

for循环

for 变量 in 值 1 值 2 值 3… 
do 
    程序 
done
for ((初始值;循环控制条件;变量变化)) 
do 
    程序 
done

while循环

while [条件判断式] 
    do 
        程序 
done

loop.sh

1 #!/bin/sh
2
3 while [[ true ]]; do
4         sleep 60
5         echo "Hello World"
6 done

select语句

1 #!/bin/sh
2
3 menu=( "Apple" "Grape" "Orange" )
4
5 PS3=“喜欢哪个?”
6
7 select item in ${menu[@]}; do
8         echo “喜欢 $item”
9 done

函数

定义函数有两种方式:

1、function fun_name() { } 

2、fun_name() { }

调用函数有3种方式

# 直接用函数名调用 test 函数 
test 
# 使用「函数名 函数参数」来传递参数 
test 1 2 
# 使用「FUN=`函数名 函数参数`」 来间接调用 
FUN=`test 1 2` 
echo $FUN

例子

按输入选择数据库

 1 #!/bin/sh
 2
 3 servers=(
 4         "server01.example.com"
 5         "user01@server02.example.com"
 6         "root@server03.example.com"
 7         "QUIT"
 8 )
 9
10 PS3=“连接服务器?”
11
12 select server in "${servers[@]}"; do
13         if [[ -z $server ]]; then
14                 echo“请选择菜单内的数字”
15                 continue
16         fi
17         if [[ $server == "QUIT" ]]; then
18                 echo“退出”
19                 exit 0
20         fi
21         echo“连接 $server”
22         ssh "$server"
23 done

stray
129 声望10 粉丝