Shell编程
注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hive Flume等等~写的都是纯干货,各种顶会的论文解读,一起进步。
今天和大家分享一下Shell编程
#博学谷IT学习技术支持
文章目录
前言
1、Shell是一种编程语言,该语言底层是C语言
2、Shell是一种解释型语言,和python类似
3、shell以后主要用于脚本编写,通过脚本实现自动化部署和调度
4、Shell是语言的统称,在Shell下面又细分了很多不同的Shell语言,默认用的Base Shell
5、Shell脚本文件的后缀是.sh,不过也可以不写
一、变量
1.用户自定义变量
----正常赋值-------------
str1='hello'
str2='I Love China' #这里必须加引号,因为字符串中间有空格
echo $str1
echo ${str1}tom #这里必须要加{}
----特殊赋值1-------------
#!/bin/bash
echo "who are you?"
read name #从键盘获取变量的值
pwd_string=$(pwd) #将pwd命令的执行结果赋值给pwd_string变量
date_string=`date` #将date命令的执行结果赋值给date_string变量
echo "hello, $name"
echo $pwd_string
echo $date_string
----特殊赋值2-------------
#!/bin/bash
pwd #单独使用,可以指定pwd命令
str=$(pwd) #只能用于将pwd命令直接结果赋值给另外一变量
str=`pwd` #同上
echo $str
----只读变量-------------
#!/bin/bash
myUrl="http://www.google.com"
readonly myUrl #将变量声明为只读,以后不能修改
myUrl="http://www.runoob.com" #这里修改就会报错
----删除变量-------------
#!/bin/sh
myUrl="http://www.runoob.com"
unset myUrl #默认情况下,定义变量之后,直到shell脚本结束空间才会释放,加上该关键字,则立刻释放
echo $myUrl #报错
2.环境变量
1、Linux的环境变量一般都是系统提前定义好的变量
2、Linux的环境变量用户也可以定义
3、Linux的环境变量可以在整个系统起作用
4、Linux的环境变量一般都是大写字母
5、Linux的环境变量一般在/etc/profile文件定义
环境量的查看
env
自定义环境变量
1、打开/etc/profile
2、在/etc/profile中定义变量,注意变量前边加上一个export关键字
export MY_ENV=helloxxxxxxxxxxxxxxxxxxx
3、刷新/etc/profile文件
source /etc/profile
3.特殊变量
变量 | 解释 |
---|---|
$# | 命令行参数的个数 |
$n | $1表示第一个参数,$2表示第二个参数,以此类推 |
$0 | 当前程序的名称 |
$? | 前一个命令或许或函数的返回码 |
$* | 以“参数1 参数2 。。。”形式保存所有参数 |
$$ | 本程序的(进程ID号)PID |
#!/bin/bash
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示*:$*";
$0 $1 $2 $3
sh demo6.sh aaa bbb ccc
#这里 $# 为 3 表示有3个参数
#这里 $? 为 上一条命令或者脚本返回的状态码 0 表示正常 非0 表示非正常
二、字符串
1.自定格式
#!/bin/sh
a=xxx
str1=hello
str2='hello world---$a' #单引号会将包括的所有字符都当成字符串的一部分
str3="hello world---$a" #只有双引号才能识别字符串中包含的变量引用
echo $str1 #输出
echo $str2 #输出 hello world---$a
echo $str3 #输出 hello world---xxx
#结论----以后记着使用双引号
2.操作
1、转义
echo "hello\"world" #输出 hello\"world
2、求字符串长度
str="slkgsklgsksklgsklsgklk"
echo ${#str}
3、字符串截取
string="敢于亮剑决不后退"
echo ${string:2:3} #解释:2表示从2索引开始,3表示截取3个字符
三、运算符
+ | 加法 | expr $a + $b 结果为 30。 |
---|---|---|
- | 减法 | expr $a - $b 结果为 -10。 |
* | 乘法 | expr $a \* $b 结果为 200。 |
/ | 除法 | expr $b / $a 结果为 2。 |
% | 取余 | expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ a == b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ a != b ] 返回 true。 |
a=10
b=20
#求两个数的和
echo `expr $a + $b` #方式1-1,运算符两边必须留空格,而且变量必须加$
echo $(expr $a + $b) #方式1-2, 运算符两边必须留空格, 而且变量必须加$
echo $((a+b)) #方式2,运算符两边没有要求
echo $[a+b] #方式3,运算符两边没有要求 !!!!!
四、流程控制语句
运算符 说明
-eq 检测两个数是否相等,相等返回 true。
-ne 检测两个数是否不相等,不相等返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。
-n STRING 字符串长度不为零
-z STRING 字符串长度为0
= 判断两个字符串是否一样
!= 判断两个字符串是否不一样
-f 存在且是普通文件
-d 存在且是目录
-h 存在且是符号链接
-e 文件存在
–r 文件存在并且可读
–w 文件存在并且可写
–x 文件存在并且可执行
1.if语句
#1)判断当前系统是否有多个ssh进程,如果有则打印true
#!/bin/bash
if [ $(ps -ef | grep -c "ssh") -gt 1 ] #注意[] 变量要留空格
then
echo "true"
fi
#2)判断/media/cdrom文件是否存在,若不存在就去创建这个目录
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi
#3)根据年龄判断是否成年
#!/bin/bash
read -p "请输入你的年龄:" age #键盘录入的提示符
if [ $age -ge 18 ] #等价与: if test $age -ge 18
then
echo "你已经成年了!"
else
echo "你还没有成年!"
fi
#4)以下实例判断两个变量是否相等:
#!/bin/bash
read -p "请输入a的值:" a
read -p "请输入b的值:" b
if [ $a -eq $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
#5)输入成绩,判断成绩“优”“良”“中”
#!/bin/bash
read -p "Enter your score(0-100):" n #-p参数表示给出提示信息
if [ $n -ge 85 ] && [ $n -le 100 ] ; then
echo "优"
elif [ $n -ge 70 ] && [ $n -le 84 ] ; then
echo "良"
elif [ $n -ge 60 ] && [ $n -le 69 ] ; then
echo "中"
else
echo "差"
fi
2.for语句
和PYTHON差不多写法
#!/bin/bash
for i in 1 2 3 4 5
do
echo "-----$i------"
done
--------------------------------
#!/bin/bash
dir=""
if [ -z $1 ] ; then
dir=$PWD
else
dir=$1
fi
for file in $(ls $dir)
do
echo "-------$file"
done
------------输出5次hello world----------------
#!/bin/bash
for((i=1;i<=5;i++))
do
echo "hello world---$i"
done
------------求1-100和----------------
#!/bin/bash
s=0
for((i=1;i<=100;i++))
do
#s=$((s+i))
#s=$[s+i]
let s+=i #加上let关键字,可以让shell的运算符和高级语言接轨 如: let s++
done
echo "The sum of 1+2+..+100 is : $s"
3.while语句
--------1)输出1-5之间的数字------------
#!/bin/bash
num=1
while [ $num -le 5 ]
do
echo $num
let num++
done
-------2)求1-100的和-------------
#!/bin/bash
i=1
sum=0
while [ $i -le 100 ]
do
let sum+=i
let i++
done
echo $sum
4.死循环
# 格式1
for((;;))
do
echo "hello world"
sleep 1
done
# 格式2
#!/bin/bash
while :
do
echo "hello world"
sleep 1
done
# 格式3
#!/bin/bash
while true
do
echo "hello world"
sleep 1
done
5.case语句
#!/bin/bash
read -p "请输入你的选择(1-3):" num
case $num in
1)
echo "你选择了1"
;;
2)
echo "你选择了2"
;;
3)
echo "你选择了3"
;;
*)
echo "你选择了其他"
;;
esac
------case的穿透-----------------
#!/bin/bash
read -p "请输入你的选择(1-3):" num
case $num in
1|2|3) echo "你选择了1或2或3"
;;
*)
echo "你选择了其他"
;;
esac
6.break、continue
和python java 里面的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
#continue
#echo "游戏结束"
;;
esac
done
总结
今天和大家分享了Shell编程基础常用代码1,下次和大家分享Shell编程基础常用代码2函数,数组,select等语法。.