Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)


shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数

应用程序—-shell命令解释器—内核—硬件

1.shell的概念
shell是一个解释性脚本语言,脚本就是不需要编译的语言,可以批量次处理命令。

定义:
解释性脚本语言,批量处理命令使用,类似windows下的.dat文件,属于Linux内核的一个外层保护工具,负责完成用户和内核的交互。

规则:

建立shell文件
vim gedit touch …
shell文件的后缀名是:.sh
shell 是一门语言,有自己的编写规则
运行环境设置

 第一行
#!/bin/bash //声明shell类型 bash shell
或者
#!/bin/sh

脚本语句编写
shell命令(if-else)+系统命令(ls cd cp …)
注释行以#开头

设置可执行性:

你建立的shell脚本是默认没有执行权限的,需要设置

chmod +x xx.sh

解析方式 xx.sh
执行脚本文件:

./xx.sh
. xx.sh
前提需要有执行权限

2.关于变量

shell 里的变量没有类型之分的,直接定义,直接使用。
使用的时候要加:$
变量定义:

  直接定义   str=hello  //等号两端不能有空格
双引号定义 str="hello"//保留特殊字符的含义
单引号定义 str = 'hello' //去除特殊字符的含义

vim 1.sh

#!/bin/bash
str1="hello"
str=hello
echo str
echo "$str1"
echo '$str1'

chmod 777 1.sh
./1.sh

在这里插入代码片 

运行结果:
Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)
说明:$:引用。放在双引号里面还是引用的作用,放在单引号里面是去除的意思。

小飘号定义str=`date`  或则 str=$(date)
:用来引用系统指令

#!/bin/bash
str1="hello"
str=hello
str2=$(date)
echo "$str2"
echo str
echo "$str1"
echo '$str1'
ls
pwd

运行结果:
Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)

**变量的引用**

类似于命令的重定向(命令运行结果重定向到变量内)
命令重定向
>输出重定向(覆盖原内容)
echo hello >1.txt
>>输出重定向(不覆盖原内容,追加)
echo world >>1.txt

变量的分类

自定义变量

自己定义,自己使用

特殊变量

$0 命令本身
$1 $2 ....$n //取命令行参数
$@//取所有的参数
不包括第0个
$? //判断上一条命令是否执行成功,成功打印0 失败打印非0
$#//传递参数的个数
$$//显示当前的进程号

#!/bin/bash
echo "$0" #显示命令本身
echo "$1" #取命令行参数
echo "$2" #取命令行参数
echo "$@" #取所有参数,不包括第0个
echo "$?" #判断上一条命令是否执行成功,成功打印0
echo "$#" #传递参数的个数
echo "$$" #显示当前的进程号

显示结果:
Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)

环境变量
定义
由系统维护,用于设置系统的shell工作环境,极少数用户可以修改
示例
执行命令的时候,就会去指定的目录(bin、sbin、usr/bin)去寻找是否有这个命令
运行程序的时候去指定的路径(lib、usr/lib)加载库文件
操作
env //显示所有环境变量
HOSTNAME:当前主机名
SHELL:shell类型
QTDIR:qt安装路径
USER:当前用户
PATH:指定当前命令寻找路径
==========================================================
设置环境变量

export PATH=$PATH:/root //将root路径添加PATH环境变量里面(重启后失效)(设置shell脚本路径)
将这句话加入到开机自启动的文件里面即可永久生效
/root/.bashrc
/etc/profile(推荐)
/etc/inittab
/etc/rcs
修改
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH(设置动态库路径,这样就不用将动态库复制到/usr/lib里了 LD_LIBRARY_PATH: 动态库的查找路径)

注意
变量都是字符串,没有类型之分,不用声明

3.输入输出
输入
read num//输入num
readonly num=5 //定义只读变量num
输出
echo命令
printf

参考代码:

#!/bin/bash
echo "qing shu ru shu:\n"
read num
echo $num
readonly n=100
echo $n

显示结果:
Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)
3.运算符&表达式
运算符
算术运算符、逻辑运算符、赋值运算符等

加减乘除 与或非

计算表达式的四种方法

var=$((1+2))

var=$[1+2]

let var=1+2

var=$(expr 1 + 2)

注意:运算符前后要加空格

4.条件测试

语法

test 条件表达式:
test 表达式1 = 表达式2
等号两边须有空格
test string1 = string2

[条件表达式]
[ string1 = string2 ]

注意
条件表达式值为真返回0,为假返回非0
echo $?
非0为假,0为真
条件表达式两边都要有空格

判断整数
-gt:大于
test 1 -gt 2 或者简写 1 -gt 2
echo $?
1为假,0为真
-ge:大于等于
-eq:等于
-le:小于等于
-lt:小于
-ne:不等于
判断表达式
-a:两个条件都有满足
----------and
-o:满足一个条件即可
----------or

字符串比较
[[ -z $str ]] //长度为0 返回0
[[ $str1 == $str2 ]]//判断是否相等
[[ $str1 != $str2 ]]

文件条件测试
-f -L -d -e
-w -r -x
Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)
5.流程控制
if then else
if [条件1]
then
命令1
elif [条件2]
then
命令2

else
命令n
fiLinux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)

#!/bin/bash
echo "请输入1-7的整数"
read num
if [ $num == 1 ]
then
echo "今天星期一"
elif [ $num == 2 ]
then
echo "今天星期二"
else
echo "输入错误"

fi

case
case $变量 in
“1”)
命令1
;;
“2”)
命令2
;;
esac
Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)

#!/bin/bash
echo "请输入1-7的整数"
read num
case $num in
"1")
echo "今天星期一"
;;
"2")
echo "今天星期二"
;;
*)
echo "输入错误"
;;
esac

for
形式一
for x in 列表
do
命令
done

Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)

#!/bin/bash
for x in 1 2 3 4 5
do
echo "hello world"
done

seq 命令:

`seq  1 10` #执行10次 

形式二
for((i=0;i<5;i++))
do
语句
done

#!/bin/bash
for x in `seq 1 10` #小撇号作用:引用系统指令
do
echo "hello world"
done

另一种写法:

#!/bin/bash
for((i=0;i<5;i++))
do
echo "hello world"
done

while
while [循环条件]
do
命令
done
Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)

#!/bin/bash
echo "请输入整数"
read num
while [ $num -lt 10 ]
do
echo "hello"
num=$(($num+1))
done

补充
退出死循环的方法:
方法一:

ctrl+c 

方法2:

ps -ef //查看当前进程
找到进程号
kill -9 30312 //杀死进程

until
until 条件
do
命令
done
Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)

#!/bin/bash
echo "请输入整数" //大于10
read num
until [$num -lt 10]
do
echo "hello"
num=$(($num-1))
done

break continue
Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)

#!/bin/bash
for ((i=0;i<5;i++))
do
echo "hello world" //打印4次
if (($i==3))
then
break //continue打印5次
fi
done

6.数组
定义

定义 1: a=(1 2 3 4 5)下标从 0 开始 各个数据之间用空格隔开
定义 2: a[0]=1;a[1]=2;a[2]=3
定义 3: a=([1]=1 [2]=2)

引用

取值: ${a[0]}
${a[@]} //取数组中所有的值
${#a[@]} //取数组的长度
${a[@]:2} //截取下标为2及以后的所有元素
${a[@]:2:2} //截取下标为2及以后的2个元素

#!/bin/bash
a=(1 2 3 4 5 6)
echo ${a[0]} //打印1
echo ${a[@]} //1 2 3 4 5 6
echo ${#a[@]} //6
echo ${a[@]:2} // 3 4 5 6
echo ${a[@]:2:2} // 3 4

7.函数
调用的时候直接写函数名即可
无返回值 无参数 仅仅用来封装代码
function_name()
{}

#!/bin/bash
fun()
{
echo "hello"
}
fun

8.shell编程的应用
8.1,查找当前路径下的所有.c文件:

#!/bin/bash
#简化版的查找.c文件的shell脚本
#寻找.c文件的函数(function )
findcfile()
{
#找到以.c结尾的文件,文件名列表存放在变量cfilelist里边
cfilelist=$(ls | grep '.c$')
#通过for循环显示文件路径以及文件名
for cfilename in $cfilelist
do
echo $(pwd)/$cfilename
done
}
#调用函数实现查找
echo "当前路径下的.c文件有:"
findcfile

Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)
即可查找出当前路径下所有的.c文件。

8.2,查找当前路径及文件夹下所有的.c文件。

#!/bin/bash
#完整版的查找.c文件的shell脚本,可以进入文件夹
#判断通过参数传递的文件夹是否存在,是否为空
if [[ -z $1 ]] || [[ ! -e $1 ]]
then
#如果没有传递文件夹,就在当前目录下寻找
echo "The directory is empty or not exist!"
echo "It will use the current directory."
newdir=$(pwd) //引用当前路径给变量
echo "当前所在路径是:"
echo $newdir
echo "这个路径下.c文件有:"
else
#如果传递的有文件夹,进入传递的文件夹,开始寻找
cd $1
newdir=$(pwd)
echo "当前所在路径是:"
echo $newdir
echo "这个路径下.c文件有:"
fi
#递归寻找.c文件的函数
findcfile()
{
#找到以.c结尾的文件,文件名列表放存在变量cfilelist里边
cfilelist=$(ls | grep '.c$')
#通过for循环显示文件路径以及文件名
for cfilename in $cfilelist
do
echo $(pwd)/$cfilename
done
#遍历该目录,当判断其为目录的时候,进入目录,调用该函数,实现递归
dirlist=$(ls)
for dirname in $dirlist
do
if [ -d $dirname ]
then
cd $dirname
findcfile
cd .. //返回上层目录
fi
done
}
#调用递归函数实现查找
findcfile

Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)
即可打印出所有的.c文件。

参考结构流程图:
shell编程
注:需要使用xmind软件进行查看

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » Linux4:shell编程(shell的概念,变量,输入输出,运算符,表达式,条件测试,流程控制,数组,函数)
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏