- 数据类型
数字 | 在Shell中所有的变量默认都是字符串型。也就是说,如果不手工指定变量的类型,那么所有的数值都是不能进行运算的: 如果想要进行数学运算,可以使用“$((运算式))”或“$[运算式]”方式运算: |
字符串 | 1.your_name='this is a string' 或 your_name="this is a string" 双引号里可以有变量、双引号里可以出现转义字符 2.greeting_1="hello, ${your_name} !" #”=”两边没有空格 greeting_2='hello, '$your_name' !' 3.字符串长度:${#your_name} # 输出16 4.提取子字符串: ${your_name:1:4} # 输出 his is a string 5.查找子字符串:`expr index "$your_name" is` #输出3 在Shell中所有的变量默认都是字符串型 |
数组 | 1.array_name=(value0 value1 value2 value3) 或 array_name[0]=value0 array_name[1]=value1 array_name[n]=valuen 2.valuen=${array_name[n]} 获取所有变量${array_name[@]} 3.获取数组的长度 # 取得数组元素的个数length=${#array_name[@]} # 或者length=${#array_name[*]} # 取得数组单个元素的长度lengthn=${#array_name[n]} |
- 变量
变量定义 | a=1 |
删除变量 | unset a |
只读变量定义 | readonly b=2 |
变量使用 | c=${b} 或 c=$b |
3. Shell运算符
a=10,b=20
算数运算符 | + - * / % = == != ` | `expr $a \* $b返回 200 [ $a == $b ] 返回 false #中括号,空格 |
关系运算符 | -eq -ne -gt -lt -ge -le | [ $a -eq $b ] 返回 false |
布尔运算符 | ! -o -a | [ $a -lt 20 -o $b -gt 100 ] 返回 true |
逻辑运算符 | && || | [ $a -lt 100 && $b -gt 100 ]]返回 false |
字符串运算符 | = != -z -n $ | [ -z $a ] 返回 false [ -n "$a" ] 返回 true |
4. Shell 流程控制
4.1选择
if condition then command1 command2 ... commandN fi | if condition then command1 command2 ... commandN else command fi | if condition1 then command1 elif condition2 then command2 else commandN fi |
4.2 test命令
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
4.3循环
#!/bin/bash for loop in 1 2 3 4 5 do echo "The value is: $loop" done | #!/bin/bash int=1 while(( $int<=5 ))#两括号 do echo $int let "int++" done | #!/bin/bash a=0 until [ ! $a -lt 10 ] #until(( a>=10 )) do echo $a a=`expr $a + 1` done |
-lt用[], <=用(()) |
4.4 Case
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
4.5 Break和continue
#!/bin/bash while : do echo -n "输入 1 到 5 之间的数字:" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esac done | #!/bin/bash while : do echo -n "输入 1 到 5 之间的数字: " read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esac done |
5. Shell 函数
[ function ] funname [()] { action; [return int;] } | #!/bin/bash demoFun(){ echo "这是我的第一个 shell 函数!" } echo "-----函数开始执行-----" demoFun echo "-----函数执行完毕-----" |
#!/bin/bash funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "输入的两个数字之和为 $? !" | #!/bin/bash funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73
|
6.参数传递
#!/bin/bash echo "Shell 传递参数实例!"; echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3"; | $ chmod +x test.sh $ ./test.sh 1 2 3Shell 传递参数实例! 执行的文件名:./test.sh #实际文件名 第一个参数为:1 第二个参数为:2 第三个参数为:3 | |
$# | 传递到脚本的参数个数 | |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 | |
$! | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数 | |
$$ | 脚本运行的当前进程ID号 |
7. Shell的输入输出
7.1 echo
显示普通字符串 | echo "It is a test" |
显示转义字符 | echo "\"It is a test\"" |
显示变量 | echo "$name It is a test" |
显示换行 | echo -e "OK! \n" # -e 开启转义 |
显示不换行 | echo -e "OK! \c" # -e 开启转义 \c 不换行 |
显示结果定向至文件 | echo "It is a test" > myfile |
7.2 printf
printf format-string [arguments...]
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
7.3 Read
read [-options] [variables]
-a array | 把读取的数据赋值给数组 array,从下标 0 开始。 |
-d delimiter | 用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。 |
-e | 在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。 |
-n num | 读取 num 个字符,而不是整行字符。 |
-p prompt | 显示提示信息,提示内容为 prompt。 |
-r | 原样读取(Raw mode),不把反斜杠字符解释为转义字符。 |
-s | 静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。 |
-t seconds | 设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。 |
-u fd | 使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。 |
7.4 输入输出重定向
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
n > file | 将文件描述符为 n 的文件重定向到 file。 |
n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file。 |
n >& m | 将输出文件 m 和 n 合并。 |
n <& m | 将输入文件 m 和 n 合并。 |
<< tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入。 |