设为首页 收藏本站
查看: 562|回复: 0

CentOS -简单shell

[复制链接]

尚未签到

发表于 2018-8-20 13:48:04 | 显示全部楼层 |阅读模式
  作业(练习)内容:
  1、描述shell程序的运行原理(可附带必要的图形说明);
  Shell(外壳):交互式进程。编译器,解释器
  shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。
  2、总结shell编程中所涉及到的所有知识点(如:变量、语法、命令状态等等等,要带图的哟);
  面向对象:把整个我们要实现的项目抽象成一个一个的对象并且定义对象之间的动作
  面向过程:把编程着源点立足点主要在问题解决过程本身
  脚本或程序源文件:文本文件
  两种方式:
  编译执行:预处理-->编译-->汇编-->链接;事先完成,结果:二进制程序文件C, C++
  解释执行:由解释器全程参与运行过程,每次读取一行,运行一行;
  程序:指令+数据
  算法+数据结构
  过程式编程:以指令为中心,设计算法,数据服务于算法;
  对象式编程:以数据为中心,设计数据结构(类),程序服务于数据结构;
  bash过程式编程:
  顺序执行:逐个执行
  选择执行:只执行其中一个分支
  循环执行:一段代码要执行0,1或多遍
  编程元素:变量、流程、函数
  变量:可变化的量,命名内存空间
  bash环境:
  本地变量:当前shell进程;
  name=value
  name: 变量名
  =:赋值符号
  value:值
  变量名:只能包含数字、字母和下划线;且不能以数字开头;
  引用变量:${name}, $name
  弱引用: "", 其内部的变量引用会被替换为变量值;
  强引用:'',其变量的变量引用会保持原有字符;
  命令引用:`COMMAND`,$(COMMAND),引用命令的执行结果;
  声明为整型:
  declare -i name[=value]
  letname=value
  环境变量:当前shell进程及其子进程;
  被”导出”的本地变量
  exportname[=value]
  declare-x name[=value]
  查看所有环境变量:env, printenv, export
  销毁:
  unsetname
  局部变量:某个函数执行过程;
  位置参数变量:在脚本中引用传递给脚本的参数;在函数中引用传递给函数的参数;
  特殊变量:$?, $*, $@, $#, $$
  变量类型:
  数值:整数,浮点数
  字符:ASCII
  作用:存储空间,运算,存储格式
  脚本:文本文件
  脚本运行,事实上是运行一个bash进程,此进程负责从脚本文件中读取一个执行逻辑,而后bash解析并运行此逻辑
  启动脚本:
  (1)#bash /PATH/TO/SCRIPT_FILE
  (2)一个执行权限
  #./PATH/TO/SCRIPT_FILE
  第一行:顶格给出shebang
  注释行:#
  bash的常用选项:
  -n:检查脚本中的语法错误;
  -x:调试执行脚本;
  条件测试:
  界定程序执行环境;
  (1) 根据运行的命令的状态结果;
  (2) 测试表达式
  testEXPRESSION
  [EXPRESSION ]
  `EXPRESSION `
  整数测试:隐含着做数值大小比较,所以不要给变量引用加引用;
  $A-gt $B:是否大于;是则为“真”,否则为“假”;
  $A-ge $B: 是否大于等于;
  $A-lt $B:是否小于;
  $A-le $B: 是否小于等于;
  $A-eq $B: 是否等于;
  $A-ne $B:是否不等于;
[root@localhost bin]# A=3  
[root@localhost bin]# B=8
  
[root@localhost bin]# [ $A -gt $B ]
  
[root@localhost bin]# echo $?
  
1
  符串测试:ASCII数值越大,字符比较时其值越大;
  "$A"> "$B":是否大于;
  "$A"< "$B":是否小于;
  "$A"== "$B":是否等于;
  "$A"!= "$B":是否不等于;
  -z"$A":是否为空;空则为“真”,否则为“假”
  -n"$A":是否不空;不空则“真”,空则为“假”
[root@localhost bin]# A=3  
[root@localhost bin]# B=8
  
[root@localhost bin]# [ "$A" != "$B" ]
  
[root@localhost bin]# echo $?
  
0
  
[root@localhost bin]#
  注意:应该使用` EXPRESSION `
  文件测试:测试文件的存在性以及属性;
  -e$file: 是否存在;存在则为“真”,否则为“假”;
  -a$file: 同上;
  -f$file:文件是否存在且为普通文件;
  -d$file:文件是否存在且为目录;
  -h$file:是否存在且为符号链接文件;
  -L$file: 同上
  -b$file:是否存在且为块设备文件;
  -c$file:是否存在且为字符设备文件;
  -S$file:是否存在且为套接字文件;
  -p$file: 是否存在且为管道文件;
[root@localhost bin]# [ -e /etc/fstab ]  
[root@localhost bin]# echo $?
  
0
  -r$file: 当前用户对文件是否拥有读权限;
  -w$file:当前用户对文件是否拥有写权限;
  -x$file:当前用户对文件是否拥有执行权限;
[root@localhost bin]# [ -r /etc/fstab ]  
[root@localhost bin]# echo $?
  
0
  
[root@localhost bin]# [ -w /etc/fstab ]
  
[root@localhost bin]# echo $?
  
0
  
[root@localhost bin]# [ -x /etc/fstab ]
  
[root@localhost bin]# echo $?
  
1
  -u $file:文件是否拥有SUID权限;
  -g$file:文件是否拥有SGID权限;
  -k$file:文件是否拥有sticky权限;
  -O$file: 当前用户是否为指定文件的属主;
  -G$file: 当前用户是否为指定文件的属组;
  双目操作符:
  $file1-nt $file2: file1是否新于file2, file1的最近一次的修改时间戳是否晚于file2的;
  $file1-ot $file2: file1是否旧于file2, file1的最近一次的修改时间戳是否早于file2的;
  $file1-ef $file2:file1与file2是否指向了同一个inode;测试二者是否为同一个文件的硬链接;
  特殊设备:
  /dev/null:空,bit buckets,吞下所有数据,并直接丢弃;
  /dev/zero:吐出一N多个0;
  特殊变量:
  $?:命令的状态结果;
  $#:传递给脚本或函数的参数的个数;
  $*和$@: 引用传递给脚本或函数的参数列表;
  shift[n]:轮替
  bash之条件判断(选择执行):
  if/then,case
[root@localhost bin]# vi 1.sh  
#!/bin/bash
  
#
  
username=user1
  
if ! id $username &> /dev/null; then
  
   useradd $username
  
   echo $username | passwd--stdin $username &> /dev/null
  
fi
  while, until
  3、总结课程所讲的所有循环语句、条件判断的使用方法及其相关示例;(if (jpg|png is not exist);echo ”You say a XX“)
  循环语句:for, while, until
  for 对一段语句重复读取执行,一般均设置一个退出或进入循环的条件来控制循环的次数
  for语法:
  for 变量名 in 列表;do
  循环类容
  done
  进入条件:列表非空
  退出条件:列表遍历结束
  循环语句:
         for,  
         #!/bin/bash
  
for username in$(cut -d: -f1 /etc/passwd); do
  
                            echo "$username primary group:$(id -n -g $username)."
  
Done
  
Until
  until 循环执行一系列命令直至条件为 true 时停止。until 循环与 while 循环在处理方式上刚好相反。一般while循环优于until循环,但在某些时候,也只是极少数情况下,until 循环更加有用。
  until 循环格式为:
  until command
  do
  Statement(s) to beexecuted until command is true
  done
  command 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。
  例如,使用 until 命令输出 0 ~ 9 的数字:
        #!/bin/bash  
         a=0
  
         until [ ! $a –lt10 ]
  
         do
  
                   echo $a
  
                   a=expr$a + 1
  
         done
  4、写一个脚本:如果某路径不存在,则将其创建为目录;否则显示其存在,并显示内容类型;(不要怀疑,就是这么简单)
#!/bin/bash  
#
  
filname="/tmp/s/d/testdit"
  
if [ -e $filname ]; then
  
         echo"$filname 已经存在"
  
         file $filname
  
else
  
         mkdir -p $filname
  
         echo "&dd$filname 完成"
  
fi
  5、写一个脚本,完成如下功能;判断给定的两个数值,孰大孰小;给定数值的方法:脚本参数,命令交互;(使用read,依然如此简单)
#!/bin/bash  
read -p "输入两个整数整数之间空格隔开:" -t 10 num1num2
  
if [ -z "$num1" ]; then
  
         echo "输入一个整数。"
  
         exit 1
  
fi
  
if [ -z "$num2" ]; then
  
         echo "输入一个整数。"
  
         exit 1
  
fi
  
if [ $num1 -ge $num2 ]; then
  
         echo "大: $num1, 小: $num2."
  
else
  
         echo "大: $num2, 小: $num1."
  
fi
  6、求100以内所有奇数之和(至少用3种方法。是的这是我们的作业^_^)
#!/bin/bash  
declare -i sum=0
  
for i in {1..100}; do
  
         if [ $[$i%2] -ne 0]; then
  
                   sum=$[$sum+$i]
  
         fi
  
done
  
echo "$sum"
  二
#!/bin/bash  
declare -i sum=0
  
for i in {1..100}; do
  
         if [ $[$i%2] -ne 0]; then
  
                   sum=$[$sum+$i]
  
         fi
  
done
  
echo "$sum"
  7、写一个脚本实现如下功能:
  (1) 传递两个文本文件路径给脚本;
  (2) 显示两个文件中空白行数较多的文件及其空白行的个数;
  (3) 显示两个文件中总行数较多的文件及其总行数;
  8、写一个脚本
  (1) 提示用户输入一个字符串;
  (2) 判断:
  如果输入的是quit,则退出脚本;
  否则,则显示其输入的字符串内容;
  9、写一个脚本,打印2^n表;n等于一个用户输入的值;(不好意思,我调皮了)
  10、写一个脚本,写这么几个函数:函数1、实现给定的两个数值的之和;函数2、取给定两个数值的最大公约数;函数3、取给定两个数值的最小公约数;关于函数的选定、两个数值都将通过脚本参数进行输入。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-554342-1-1.html 上篇帖子: 初学时的shell-shell 下篇帖子: linux常用SHELL-sky
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表