shell入门

1.    概述
1.1.   简介
       Shell Script Shell 脚本与Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,毕竟它使用了Linux/Unix 下的命令。
       换一种说法也就是,shell script 是利用shell 的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell 的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。
       更明白地来说,shell script 就像早期dos 年代的.bat ,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script 更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell 来写程序,而不必使用类似C 程序语言等传统程序编写的语法。
 
1.2.   shell shell 脚本有什么区别?
       确切一点说,Shell 就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux 发送请求以便运行程序的接口系统级程序,用户可以用Shell 来启动、挂起、停止甚至是编写一些程序。 Shell 本身是一个用C 语言编写的程序,它是用户使用Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言( 就是你所说的shell 脚本) 。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux 系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。
1.3.     为什么使用 shell 脚本?
shell 脚本实现自动化运维可以自动化管理系统
2.     shell 入门
2.1.   查看系统中支持的所有 shell 类型
#cat /etc/shells
#chsh -l
 
2.2.   如何切换 shell
直接输入shell 的名字
例: #bash
切换到bash
sh bash nologin tcsh csh ksh
 
2.3.   查看当前使用的 shell
#echo $SHELL
2.4.     第一个 shell 程序
vi test.sh
#!/bin/sh
ls
lsData = `ls`
echo $ lsData
 
2.5.   如何执行 shell 脚本
  sh demo.sh 不需要执行权限在子shell 中执行
  ./demo.sh 需要执行权限在子shell 中执行
 
3.    shell 语法
3.1.   shell 变量
变量的类型
1 自定义变量
用户在编写脚本时根据自己的需求定义的变量
2 系统环境变量
系统在启动的过程中读取自己的配置文件定义的变量
PATH /bin/:$PATH
3 位置变量
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
变量的定义
例: #name=gaoyaohua
变量名字=变量值
注:变量名命名必须以字母或下划线开头,区分大小写字母
例: #export name=gaoyaohua
例: #wo=gaoyaohua
#export wo
export 把变量定义为全局环境变量(当前shell 跟子shell 都有效)
 
变量的取消
例: #unset name
 
变量的查看
#set // 显示系统内的所有变量,包括自定义变量
#env // 只显示系统环境变量,不会显示自定义变量
 
变量的调用
例: #echo $name
   $ 变量名
例: #echo 'your name is $name.'
' ' 单引号变量原样输出( 弱引用)
例: #echo "your name is $name."
" " 双引号变量被变量值取代( 强引用)
  创建数组变量
方法一:一次赋一个值
数组名[ 下标]= 变量值
# array[0]=pear
# array[1]=apple
# array[2]=orange
# array[3]=peach
 
方法二:一次赋多个值
# array=(tom jack alice)
# array=(`cat /etc/passwd`) 希望是将该文件中的每一个行作为一个元数赋值给数组array3
# array=(`ls /var/ftp/shell/for*`)
# array=(tom jack alice "bash shell")
 
# declare -a
declare -a array='([0]="pear" [1]="apple" [2]="orange" [3]="peach")'
declare -a array='([0]="tom" [1]="jack" [2]="alice")'
 
访问数组元数:
# echo ${array[0]} 访问数组中的第一个元数
# echo ${array[@]} 访问数组中所有元数  等同于 echo ${array1[*]}
# echo ${#array[@]} 统计数组元数的个数
# echo ${array[@]:1} 从数组下标1 开始
# echo ${array[@]:1:2} 从数组下标1 开始,访问两个元素
 
3.2.   比较规则:
整数值比较
[ 整数1 选项整数2 ]
-ne 不等于,-eq 等于,-ge 大于等于,-le 小于等于,-gt 大于,-lt 小于
字符串比较
[ 字符串1 比较符字符串2 ]
== = != 不等于,-z 如果 string 长度为零,则为真,-n string 如果 string 长度非零,则为真
逻辑比较
[表达式1 ]符号[表达式2 ]符号[表达式3
&& 或者-a 表示and || 或者 -o 表示or
 
3.3.   流程控制:
# 条件语句
单分支
if [条件表达式 ];then
echo "demo 1"
fi
双分支
if [ 条件表达式 ];then
echo  "demo2"
else
echo  "demo3"
fi
多分支结构
if [ 条件表达式 ];then
echo "demo 1"
elif [ 条件表达式 ];then
echo "demo 2"
elif [ 条件表达式 ];then
echo "demo 3"
elif [ 条件表达式 ];then
echo "demo 4"
else
echo "demo 5"
fi
 
# 循环语句
for
for 变量名 in 变量值列表
do
echo "demo 1"
done
while
while 条件表达式
do
echo "demo 1"
done
until
until 条件表达式
do
echo "demo 1"
done
 
# 选择语句 case
case $ 变量名 in
模式1)
echo "demo 1"
;;
模式2)
echo "demo 1"
;;
模式3)
echo "demo 1"
;;
*)
echo "demo 1"
;;
esac
 
例子:
select choice in green blue red quit "bash shell"
do
       case $choice in
               red)
                       echo " 红色"
                       ;;
               green)
                       echo " 绿色"
                       ;;
               blue)
                       echo " 蓝色"
                       ;;
               *)
                       exit
       esac
done
 
 
3.4.   函数:
# 函数
完成特定功能的代码片段(块)
shell 中定义函数可以使用代码模块化,便于复用代码
函数必须先定义才可以使用
 
# 定义函数的方法
方法一:
函数名() {
函数要实现的功能代码
}
 
方法二:
function 函数名 {
函数要实现的功能代码
}
 
# 调用函数的方法
函数名
函数名参数1 参数2
3.5.    shell 中的关键字
shift 作用:使位置参数向左移动,默认移动1 位,可以使用shift 2
exit  退出整个程序
break 结束当前循环,或跳出本层循环
continue 忽略本次循环剩余的代码,直接进行下一次循环
4.    调试
sh -x demo.sh 以调试的方式执 linux CentOS网卡相关命令小结.note 行,这将执行该脚本并显示所有变量的值。
sh -n demo.sh 仅调试 syntax error ,这将返回所有语法错误。
 

你可能感兴趣的:(shell,Shell)