您的位置:首页 > 运维架构 > Shell

Shell笔记

2016-04-20 10:24 531 查看
#!/bin/bash
var2 = 'var2'
echo $var2
echo ${var2}
var2 = 'var2_1' #变量可以重复定义但变量名前不加$

var3 = 'var3'
readonly var3 #将var3声明为只读变量
#var3 = 'var3_1' 这里就不能再改变var3的值了

var4 = 'var4'
unset var4 #删除var4变量
#echo ${var4} 这里不能再调用var4了

var5 = 'var5'
var6 = "This is ${var5}"       #拼接字符串
var7 = "This is "$var5" ,too" #拼接字符串

var8 = 'itvar8'
echo ${#var8} #输出var8的长度,即输出6

var9 = 'Hello World!'
echo ${var9:1:5} #从字符串第2个字符开始截取5个字符

var10 = 'Hello World!'
echo `expr index "$var10" World` #查找字符World在字符串中的位置

arr1 = ('var1' 'var2' 'var3') #定义数组方式1
arr2 = (                           #定义数组方式2
'var1'
'var2'
'var3'
)

var3[1] = 'var2'            #通过下标赋值

var_arr_1 = ${var2[1]}  #读取数组元素
var_arr_all = ${var2[@]}#读取所有元素

arr_lend_1 = ${#var2[@]} #获取数组长度
arr_lend_2 = ${#var2[*]} #获取数组长度


向脚本传递参数

#!/bin/bash
echo "执行的文件名$0";
echo "第一个参数为$1";
echo "第二个参数为$2";


  运行:

$ chmod +x shell.sh
$ ./shell.sh 1 2
执行的文件名shell.sh
第一个参数为1
第二个参数为2


  特殊参数:

参数处理     说明
$#     传递到脚本的参数个数
$*     以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$     脚本运行的当前进程ID号
$!     后台运行的最后一个进程的ID号
$@     与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$-     显示Shell使用的当前选项,与set命令功能相同。
$?     显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。


  

算术运算:

  原生bash不支持简单的数学运算,但是可以通过其他命令来实现,比如awk和expr

#!/bin/bash

a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"


文件测试运算符:

  -r file :文件是否可读

  -w file: 文件是否可写

  -x file: 文件是否可执行

file="/workplace/shell/shell.sh"
if [ -r $file ]
then
echo "文件可读"
else
echo "文件不可读"
fi
if [ -w $file ]
then
echo "文件可写"
else
echo "文件不可写"
fi
if [ -x $file ]
then
echo "文件可执行"
else
echo "文件不可执行"
fi


echo命令:

#!/bin/bash

read name   #read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
echo $name

echo "Hello World" > myfile #显示结果定向至文件


流程控制:

  if的语法:

if condition1
then
command1
elif condition2
then
command2
else
commandN
fi


  for的语法:

for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done


  while的语法:

while condition
do
command
done


  例:

#!/bin/sh
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done


  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


  

函数

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: