shell脚本入门

什么是shell

linux 命令组合在一起变成shell脚本,减轻了工作量,提高工作效率。
Shell就是一个用户跟操作系统之间的一个命令解释器。

常见的shell 有哪些

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)

最常用的shell是bash。Bash是大多数Linux操作系统默认的Shell环境。

shell 编程注意事项

  • shell脚本文件的命名:Shell脚本名称命名一般为英文、大写、小写,后缀以.sh 结尾。PS:Linux文件没有后缀代表文件类型的说法,添加后缀只是为了见名知意
  • 脚本首行需要 #!/bin/bash 开头
  • 变量命名 变量命名规范

变量

Shell编程中变量分为三种,分别是系统变量、环境变量和用户变量

系统变量

主要是用于对参数判断和命令返回值判断时使用,系统变量详解如下:

$0 		当前脚本的名称
$n 		当前脚本的第n个参数
$* 		当前脚本的所有参数(不包括程序本身)
$# 		当前脚本的参数个数(不包括程序本身)
$? 		命令或程序执行完后的状态,返回0表示执行成功
$$ 		程序本身的PID号

环境变量

主要用于程序运行时,先设置,再使用,常见的命名如下

PATH  		命令所示路径,以冒号为分割
HOME  		打印用户家目录
SHELL 		显示当前Shell类型
USER  		打印当前用户名
ID    		打印当前用户id信息
PWD   		显示当前所在路径
TERM  		打印当前终端类型
HOSTNAME    显示当前主机名
PS1         定义主机命令提示符的
HISTSIZE    历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间
RANDOM      随机生成一个 032767 的整数
HOSTNAME    主机名

用户环境变量

自定义shell环境变量

用户变量又称为局部变量,在Shell脚本内部或者临时局部使用

Httpd_sort=httpd-2.4.6-97.tar
BACK_DIR=/data/backup/
IPaddress=10.0.0.1

数组

格式:array=(元素 1 元素 2 元素 3 ...)
用小括号初始化数组,元素之间用空格分隔。

  • 定义方法 1:初始化数组 array=(a b c)
  • 定义方法 2:新建数组并添加元素 array[下标]=元素
  • 定义方法 3:将命令输出作为数组元素array=($(command))
#!/bin/bash
IP=(10.0.0.1 10.0.0.2 10.0.0.3)
# #IP[*] 数组所有元素
# ${#IP[*]} 数组大小
for ((i=0;i<${#IP[*]};i++)); do
	echo ${IP[$i]}
done

流程控制

if条件语句

If条件判断语句,通常以if开头,fi结尾。也可加入else或者elif进行多条件的判断

# 单分支语句
	if (表达式);then
		语句1
	fi
# 多支条件语句
	if (表达式)
		语句1
	elif
		语句2
	elif
		语句2
	fi  

常见逻辑判断运算符

-f	 	判断文件是否存在 eg: if [ -f filename ];
-d	 	判断目录是否存在 eg: if [ -d di];
-eq		等于,应用于整型比较 equal;
-ne		不等于,应用于整型比较 not equal;
-lt		小于,应用于整型比较 letter;
-gt		大于,应用于整型比较 greater;
-le		小于或等于,应用于整型比较;
-ge 	大于或等于,应用于整型比较;
-a		双方都成立(and) 逻辑表达式 –a 逻辑表达式;
-o		单方成立(or) 逻辑表达式 –o 逻辑表达式;
-z		空字符串;
-x      是否具有可执行权限
||      单方成立;
&&      双方都成立表达式。

循环语句

for

格式1:for (i=0;i <n;i++);do list ; done
格式2:for name [ [ in [ word ... ] ] ; ] do list ; done

for (i=0;i<n;i++); do
 语句
done
for 变量名 in 取值列表; do
  语句 1
done

举个例子

#方法 1:
#!/bin/bash
IP=(10.0.0.1 10.0.0.2 10.0.0.3)
for ((i=0;i<${#IP[*]};i++)); do
  echo ${IP[$i]}
done
# bash test.sh
10.0.0.1
10.0.0.2
10.0.0.3

#方法 2:
#!/bin/bash
IP=(10.0.0.1 10.0.0.2 10.0.0.3)
for IP in ${IP[*]}; do
  echo $IP
done 

while

格式以while…do开头,done结尾
与while 关联的还有一个until语句,当条件表达式为 false 时才循环,使用比较少。

while  (表达式)
do
  语句1
done

break 和 continue 语句

break是终止循环,在嵌套循环中,break 命令后面还可以跟一个整数,表示跳出第几层循环。
continue是跳出当前循环,同样,continue 后面也可以跟一个数字,表示跳出第几层循环。

case选择语句

语法格式以case…in开头,esac结尾。
每个模式必须以右括号结束,命令结尾以双分号结束

case 模式名  in
  模式 1)
    命令
    ;;
  模式 2)
    命令
    ;;
*)
不符合以上模式执行的命令
esac

举个栗子

#!/bin/bash
#判断用户输入
read -p "Please choose yes/no: " -t 30 cho
#在屏幕上输出"请选择yes/no",然后把用户选择赋予变量cho
case $cho in
#判断变量cho的值
    "yes")
    #如果是yes
        echo "Your choose is yes!"
        #则执行程序1
        ;;
    "no")
    #如果是no
        echo "Your choose is no!"
        #则执行程序2
        ;;
    *)
    #如果既不是yes,也不是no
    echo "Your choose is error!"
    #则执行此程序
    ;;
esac

select语句

select是一个类似于 for 循环的语句
其语法格式以select…in do开头,done结尾

# variable 表示变量,value_list 表示取值列表,in 是 Shell 中的关键字
select variable in value_list
do
    statements
done

举个栗子

#!/bin/bash
echo "What is your favourite OS?"
select name in "Linux" "Windows" "Mac OS" "UNIX" "Android"
do
    case $name in
        "Linux")
            echo "Linux是一个类UNIX操作系统,它开源免费,运行在各种服务器设备和嵌入式设备。"
            break
            ;;
        "Windows")
            echo "Windows是微软开发的个人电脑操作系统,它是闭源收费的。"
            break
            ;;
        "Mac OS")
            echo "Mac OS是苹果公司基于UNIX开发的一款图形界面操作系统,只能运行与苹果提供的硬件之上。"
            break
            ;;
        "UNIX")
            echo "UNIX是操作系统的开山鼻祖,现在已经逐渐退出历史舞台,只应用在特殊场合。"
            break
            ;;
        "Android")
            echo "Android是由Google开发的手机操作系统,目前已经占据了70%的市场份额。"
            break
            ;;
        *)
            echo "输入错误"
            exit  1
            ;;
    esac
done

ps:exit 是一个 Shell 内置命令,用来退出当前 Shell 进程,并返回一个退出状态,使用$?可以接收这个退出状态。
exit 命令可以接受一个整数值作为参数,代表退出状态。默认状态值是 0。
一般情况下,退出状态为 0 表示成功,退出状态为非 0 表示执行失败(出错)了。
exit 退出状态只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。

函数

语法格式以function name() {…}。
默认不能将参数传入()内部,参数传递在调用函数名称传递,例如:name args1 args2
通过函数名直接调用,不加小括号

#!/bin/bash
func() {
  VAR=$((1+1))
  return $VAR
  echo "This is a function."
}
# 调用
func  
# 命令或程序执行完后的状态,返回0表示执行成功
echo $?
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值