shell脚本使用教程1

shell脚本使用教程1

一.shell基础知识
1.位置变量
位置变量是指函数或脚本后跟的第n个参数。
1 − 1- 1n,需要注意的是从第10个开始要用花括号调用,例如${10}
shift可对位置变量控制

#!/bin/bash
echo "1: $1"
shift
echo "2: $2"
shift
echo "3: $3"
# bash test.sh a b c
1: a
2: c
3:

2.特殊变量
在这里插入图片描述
3.单引号和双引号
单引号是告诉shell忽略特殊字符,而双引号则解释特殊符号原有的意义。

# N=3
# VAR="1 2 $N"
# echo $VAR
1 2 3
# VAR='1 2 $N'
# echo $VAR
1 2 $N

二.字符串处理之${}
1.获取字符串长度

VAR = "hello world"
echo ${#VAR}

2.字符串切片
格式:
${parameter:offset}
${parameter:offset:length}
截取从offset个字符开始,向后length个字符

VAR = "hello world"
#截取倒数第三个字符后的2个字符
echo ${VAR:(-3):2}

3.替换字符串
格式:${parameter/pattern/string}
pattern前面开头一个正斜杠只匹配第一个字符串,两个正斜杠匹配所有字符

# VAR='hello world world!'
将第一个 world 字符串替换为 WORLD:
# echo ${VAR/world/WORLD}
hello WORLD world!
将全部 world 字符串替换为 WORLD:
# echo ${VAR//world/WORLD}
hello WORLD WORLD!
替换正则匹配为空:
# VAR=123abc
# echo ${VAR//[^0-9]/}
123
# echo ${VAR//[0-9]/}
abc

4.字符串截取
格式:
删除匹配前缀
${parameter#word}
${parameter##word}
删除匹配后缀
${parameter%word}
${parameter%%word}

# 去掉左边,最短匹配模式, ##最长匹配模式。
% 去掉右边,最短匹配模式, %%最长匹配模式。
# URL="http://www.baidu.com/baike/user.html"
以//为分隔符截取右边字符串:
# echo ${URL#*//}
www.baidu.com/baike/user.html
以/为分隔符截取右边字符串:
# echo ${URL##*/}
user.html
以//为分隔符截取左边字符串:
# echo ${URL%%//*}
http:
以/为分隔符截取左边字符串:
# echo ${URL%/*}
http://www.baidu.com/baike```
以.为分隔符截取左边:
# echo ${URL%.*}
http://www.baidu.com/baike/user
以.为分隔符截取右边:
# echo ${URL##*.}
html```

5.变量状态赋值
${VAR:-string} 如果 VAR 变量为空则返回 string
${VAR:+string} 如果 VAR 变量不为空则返回 string
${VAR:=string} 如果 VAR 变量为空则重新赋值 VAR 变量值为 string
${VAR:?string} 如果 VAR 变量为空则将 string 输出到 stderr
如果变量为空就返回 hello world!:

# VAR=
# echo ${VAR:-'hello world!'}
hello world!
如果变量不为空就返回 hello world!# VAR="hello"
# echo ${VAR:+'hello world!'}
hello world!
如果变量为空就重新赋值:
# VAR=
# echo ${VAR:=hello}
hello
# echo $VAR
hello
如果变量为空就将信息输出 stderr:
# VAR=
# echo ${VAR:?value is null}
-bash: VAR: value is null

6.字符串颜色
在这里插入图片描述

#!/bin/bash
# 字体颜色
for i in {31..37}; do
echo -e "\033[$i;40mHello world!\033[0m"
done
# 背景颜色
for i in {41..47}; do
echo -e "\033[47;${i}mHello world!\033[0m"
done
# 显示方式
for i in {1..8}; do
echo -e "\033[$i;31;40mHello world!\033[0m"
done

三.字符串表达式与运算符
1.字符串比较
使用-z或-n判断字符串长度时,变量要加双引号。

运算符描述实例
-n字符串长度不等于0为真VAR1=1;VAR2="" [ -n “ V A R 1 " ] 为 t r u e [ − n " VAR1" ]为 true [ -n " VAR1"]true[n"VAR2” ]为 false
-z字符串长度等于0为真VAR1=1;VAR2="" [ -z “ V A R 1 " ] 为 f a l s e [ − z " VAR1" ]为 false [ -z " VAR1"]false[z"VAR2” ]为 true
str字符串存在为真VAR1=1;VAR2="" [ $VAR1 ]为 true [ $VAR2 ]为 false
# [ -z $a ] && echo yes || echo no
yes
# [ -n $a ] && echo yes || echo no
yes
# 加了双引号才能正常判断是否为空
# [ -z "$a" ] && echo yes || echo no
yes
# [ -n "$a" ] && echo yes || echo no
no
# 使用了双中括号就不用了双引号
# [[ -n $a ]] && echo yes || echo no
no
# [[ -z $a ]] && echo yes || echo no
yes

2.逻辑判断符
在这里插入图片描述
四.shell流程控制
1.if
格式: if list; then list; [ elif list; then list; ] … [ else list; ] fi
实例一.判断crond进程是否运行

#!/bin/bash
NAME=crond
NUM=$(ps -ef |grep $NAME |grep -vc grep)
if [ $NUM -eq 1 ]; then
echo "$NAME running."
else
echo "$NAME is not running!"
fi

2.for
格式: for name [ [ in [ word … ] ] ; ] do list ; done
实例一.检查多个域名是否可以访问

#!/bin/bash
URL="www.baidu.com www.sina.com www.jd.com"
for url in $URL; do
	#这条命令是常见的测试网站是否正常的用法
	HTTP_CODE=$(curl -o /dev/null -s -w %{http_code} http://$url)
	if [ $HTTP_CODE -eq 200 -o $HTTP_CODE -eq 301 ]; then
		echo "$url OK."
	else
		echo "$url NO!"
	fi
done

bash是支持C语言的for循环的,sh则会报语法错误。

#!/bin/bash
j=$1
for ((i=1; i<=j; i++))
do
touch file$i && echo file $i is ok
done

3.while
格式:while list; do list; done
while 条件表达式; do
命令
done
实例一.使用while循环逐行播放a.txt文件,有三种方式
3.1

#!/bin/bash
cat ./a.txt | while read LINE; do
	echo $LINE
done

3.2

#!/bin/bash
while read LINE; do
echo $LINE
done < ./a.txt

3.3

#!/bin/bash
exec < ./a.txt # 读取文件作为标准输出
while read LINE; do
echo $LINE
done

4.case语句
case 语句一般用于选择性来执行对应部分块命令。
格式: case word in [ [(] pattern [ | pattern ] … ) list ;; ] … esac

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

每个模式必须以右括号结束,命令结尾以双分号结束。
实例一.根据位置参数匹配不同的模式

#!/bin/bash
case $1 in
	start)
		echo "start."
		;;
	stop)
		echo "stop."
		;;
	restart)
		echo "restart."
		;;
	*)
		echo "Usage: $0 {start|stop|restart}"
esac

5.select

#!/bin/bash
PS3="Select a number: "
while true; do
	  select mysql_version in 5.1 5.6 quit; do
		     case $mysql_version in
				5.1)
 					echo "mysql 5.1"
					break
					;;
				5.6)
					echo "mysql 5.6"
					break
					;;
				quit)
					exit
					;;
				*)
					echo "Input error, Please enter again!"
					break
				esac
		done
done
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值