热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LinuxShell编程学习

LinuxShell编程学习--Linux通用技术-Linux编程与内核信息,下面是详情阅读。
一、Shell变量 主要有本地变量和环境变量。

1、本地变量 -- 在用户现有运行的脚本中使用
1) 定义本地变量 格式: variable-name=value
例子:[root@jike1 /root]# LOCALTEST="test"
[root@jike1 /root]# echo $LOCALTEST (注意:echo $LOCALTEST 和 echo ${LOCALTEST}的效果是一样的)
(在变量名前加$, 可以取得此变量的值,使用echo命令可以显示变量的值)
2) 显示本地变量 格式: set
例子:[root@chinaitlab root]# set
3) 清除本地变量 格式:unset variable-name
例如:[root@jike1 /root]# unset LOCALTEST
此时再执行echo $LOCALTEST将看不到变量LOCALTEST的输出。

2、环境变量 -- 在所有的子进程中使用
1) 定义环境变量 格式: export variable-name=value (与本地变量的定义相比,多了一个export关键字)
例子:[root@chinaitlab /root]# export DOMAIN="chinaitlab.com"
[root@ chinaitlab shell]# vi testenv.sh
#!/bin/bash #表示用bash来解析脚本
#testenv.sh
echo $DOMAIN
[root@chinaitlab shell]# chmod +x testenv.sh
[root@chinaitlab shell]# ./testenv.sh
chinaitlab.com
2) 显示环境变量 格式: env (本地变量的显示使用set,环境变量的显示使用env)
例子: [root@chinaitlab test]# env
3) 清除环境变量 格式:unset variable-name (用法与本地变量相同,都使用unset)
例子: [root@chinaitlab shell]# unset DOMAIN
此时再执行./testenv.sh将看不到变量DOMAIN的输出。

3、其它变量
1) 位置变量 $0,$1,$2,$3……$9
2) 只读变量 readonly variable
注意:只读变量不能被清除和改变其值,所以要谨慎使用。
3) 特殊变量 $#,$?,$$(表示当前进程的PID)……

二、运算符和表达式

1、运算符是对计算机发的指令,运算符类型有:
算术运算符(+、-、*、/)
按位运算符(~、<<、>>、&、|、^)
逻辑运算符(&&、||、 > 、= = 、<、! =)
赋值运算符(=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=)

2、表达式是运算符和运算对象的组合体。
1) $[]:可以接受不同基数的数字的表达式
echo $[10+1] (输出:11)
echo "$[2+3],$HOME" (输出:5,/root)
echo $[2<<3],$[8>>1] (输出:16,4)
echo $[2>3],$[3>2] (输出:0,1 表达式为false时输出0,为true时输出1)
2) 字符表达式:直接书写,采用单引号,双引号引起来。
echo " $HOME,That is your root directory." (输出:/root,That is your root directory.)
echo ' $HOME,That is your root directory. ' (输出:$HOME,That is your root directory.)
单引号和双引号的区别在于:单引号是原样显示,双引号则显示出变量的值。
3) test表达式

三、控制结构

1、if语句
例: #!/bin/bash
#if.sh
if [ "10" -lt "12" ] #注意:if和[之间,[和"10"之间,"12"和]都有空格,如果不加空格,会出现语法错误
then
echo "Yes,10 is less than 12"
fi

2、case语句
例: #!/bin/bash
#case.sh
echo -n "Enter a start or stop:"
read ANS
case $ANS in
start)
echo "You select start"
;;
stop)
echo "You select stop"
;;
*)
echo "`basename $0`: You select is not between start and stop" >&2
#注意:>和&2之间没有空格,>&2 表示将显示输出到标准输出(一般是屏幕)上
exit;
;;
esac

3、for循环语句
格式: for 变量名 in 列表
do
命令1
命令2
... ...
done

4、until循环语句
格式: until 条件
do
命令1
命令2
... ...
done

5、while循环语句
格式: while 命令
do
命令1
break
命令2
continue
命令3
... ...
done

四、输入输出

1、几个重要的工具
1) echo
例:echo -n "Enter a number from 1 to 2:" (-n 表示不换行,此时光标停留在行尾)
2) read
例:read ANS (表示将用户的输入存放到变量ANS中)
3) cat (显示文件内容)
4) 管道( | ) (一个程序的输出作为另一个程序的输入)
例:ls -l | grep "d"
5) 文件重定向( >和>> )
例:ls -l > /tmp/a.txt (将输出的结果重写到a.txt这个文件中)
ls -l >> /tmp/a.txt (将输出的结果追加到a.txt这个文件中,常用于记录日志)
6) 标准输入( $0 )、标准输出( $1 )和标准错误( $2 )
采用文件描述符($0、$1、$2)来定义。

2、实例:readme.sh
#!/bin/bash
#readname.sh
echo -n "First Name: "
read firstname
echo -n "Last Name: "
read lastname subname
echo -e "Your First Name is :${firstname}\n " #加了-e表示将\n解析为转义字符
echo -e "Your Last Name is :${lastname}\n "
echo -e "Your Subname is :${subname}\n "
echo "Your First Name is :${firstname}\n " >>firstname.txt #这行没加-e,因此在输出中会原样显示\n
echo "Your Last Name is :${lastname}\n " >lastname.txt
echo "Your Subname is :${subname}\n " >&1

五、文本过滤

1、正则表达式 (就是模式匹配)
2、find (查找文件)
例:find ./ -name "*.txt" -print
3、grep (查找字符)
例:grep "[5-8][6-9][0-3]" access_log
4、awk (把一系列数据分域,即分成列)
例:awk '{print $1"\t"$4}' access_log
5、sed (对数据进行查找和替换)
例:sed -n 's/chinaitlab/hello/p' myfile.txt (将myfile.txt文件中的chinaitlab替换成hello,并打印到屏幕上来,s表示替换,p表示打印。如果加上重定向符就可以将替换后的内容输出到一个文件中去。)
6、sort (排序)
例:sort ip.txt
7、uniq (显示这一列是唯一的还是不唯一的,可以唯一化)
例:uniq ip.txt
8、split (可以对文件进行分割)
例:split myfile.txt
9、实例:kill_process.sh
#!/bin/bash
#kill_process.sh
current_PID=$$
ps -aux|grep "/usr/sbin/sshd"|grep -v "grep"|awk '{print $2}'>/tmp/${current_PID}.txt
for pid in `cat /tmp/${current_PID}.txt`
do
{
echo "kill -9 $pid"
kill -9 $pid
}
done
rm -f /tmp/${current_PID}.txt

六、Shell函数

1、定义函数有两种格式,分别为:
函数名()
{
命令1
... ...
}
function 函数名()
{
... ...
}

2、实例:func.sh
#!/bin/bash
#func.sh
# Source function library. # /etc/rc.d/init.d/functions中存放了大量已经写好的函数
. /etc/rc.d/init.d/functions # 引入/etc/rc.d/init.d/functions中的函数,相当于其它语言中的include
function hello ()
{
echo "Hello,$1 today is `date`"
}
echo "now going to the function hello"
hello chinaitlab
echo "back from the function"
推荐阅读
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • Echarts图表重复加载、axis重复多次请求问题解决记录
    文章目录1.需求描述2.问题描述正常状态:问题状态:3.解决方法1.需求描述使用Echats实现了一个中国地图:通过选择查询周期&#x ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • hadoop1.2.1文档中这样写:Nowcheckthatyoucansshtothelocalhostwithoutapassphrase:$sshlocalhostIfyou ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
author-avatar
手机用户2602887787
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有