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

shell脚本--(符号和语法)

[复制链接]

尚未签到

发表于 2018-8-28 06:26:16 | 显示全部楼层 |阅读模式
  shell脚本
  shell脚本:一直都在用,但是没有系统的学习过,只是在linux命令行模式敲一些简单的常用的指令,现在系统的学习一番。
  一、创建shell脚本,一般以.sh结尾(linux下后缀只是种显示,没有任何具体含义)文件创建后需要chmod 0755 name 给它加上权限,之后就可以用./运行了
  进入文件需要在最顶部加上shell脚本解释器,这个文件中的所有命令都会被bash拿到去解释。下面会说到shell的工作模式。
  二、shell的工作模式;
  我是这样理解的当我们在脚本中写这样一段程序的时候
#!/bin/bash  
ls
  这个时候shell是这样去解释的,当前shell(bash)会fork一个子bash去获得这个脚本中的所有命令,然后到ls这一行的时候,sh会再fork一个新的bash去execv这个ls可执行程序,之后将等待的结果输出到当前终端上。
  shell的命令分两种,一种是内部命令,一种是shell可执行的应用程序,当执行内部命令的时候frok的子bash就会在它的空间内执行这条命令。
  三、shell脚本中的一些常见符号:
  1>简单符号
  1 #!/bin/bash  
  2 #shell中用#作为注释
  
  3 count=1            #变量的定义不用声明类型,shell解释器会帮你去做
  
  4 val=0
  
  5 echo $count        #$符号用来取变量的值
  
  6
  
  7 echo ${count}t     #建议加上{}因为有时候你会像这样去输出
  
  8
  
  9 val=$(date)     #$()的作用是命令替换,这行代码的意思就是将date的命令输出信息传给val
  
10 echo $val
  
11
  
12 val=`date`       #``反引号的作用和$()一样都是命令替换,不同的是``中不能再用``
  
13 echo $val
  
14
  
15 echo 'val'       #''单引号的作用是保持字符串本身的意思,但它里面不能再有字符串了
  
16
  
17 echo "va'l'"      # ""和单引号的不同在于它的里面可以有字符串''
  
                                                                                                                       6,0-1        全部
  2>意义符号
  
  [ ]中括号的意思是一个判断语句注意[是一个命令所以后面要加空格,也可以用test命令。例如
19 val=10  
20
  
21 test $val -eq 12   #test命令的书写格式,判断val的值是否等于12
  
22 echo $?
  
23 [ $val -eq 10 ]   #[ ]命令的书写格式
  
24 echo $?
  
25 [ $val -eq 11 ]
  
26 echo $?
  
27
  
28
  

  
                                                                                                                                            20,0-1       底端
  echo $?的意思是拿到上一个执行语句的退出码,它的返回值成功为0失败为1。
  3>shell下的比较命令;
  
  -eq;等于
  -ne;不等于
  -lt;小于
  -le;小于等于
  -gt;大于
  -ge;大于等于
  另外的常用比较命令
  -d 判断目录是则为真
  -f 判断是文件则为真
  逻辑与 -a  [ $val -gt 10 -a $val -lt 100] 大于10小于100的数
  逻辑或 -o  [ $val -eq 10 -a $val -eq 100] 等于10或等于100的数
  取反 !   [ $val -eq 10 -a $val -eq 100] 不等于10或不等于100的数
  
  
  四、特殊变量
  $0:相当于C语言main函数的argv[0]
  $1、$2...
  这些称为位置参数(Positional Parameter),相当于C语言main函数 的argv[1]、argv[2]...
  $#
  相当于C语言main函数的argc - 1,注意这里的#后面不表示注释
  $@
  表示参数列表"$1" "$2" ...,例如可以用在for循环中的in后面。
  $?
  上面已经提过
  $$
  显示当前shell的进程号
DSC0000.png

  可以看出和c不同的地方在于,它的arcg->$#只输出不包括./这一列。
  shift命令可以将位置左移,例如上面的程序加上shift 2后,$1的输出则是one了,shift 1为默认不移动的值
  
  
  五、常见符号的区别
  1> [[双中括号和[单中括号的区别
  
   DSC0001.png
  [[中可以用 == ! && || 正则表达式进行判断,但是上面的结果显然有问题,[[ 在&& ||判断的时候很难判断正确
  
  2> ``与$()
  
#$()的作用是命令替换,这行代码的意思就是将date的命令输出信息传给val  
#``反引号的作用和$()一样都是命令替换,不同的是``中不能再用``
  3> (())与let
  (())和let都可以进行运算,基本可以互换的
  ((val++))
  let val++
  六、shell语法
  while循环;
  1 #!/bin/bash  
  2
  
  3 val=0
  
  4 while [ $val -lt 10 ]
  
  5 do
  
  6     echo $val
  
  7     let val++
  
  8 done
  
  9  #注意do done的书写                                                                                                                   4,1          全部
  if判断:
  1 #!/bin/bash  
  2
  
  3 val=10
  
  4
  
  5 if [ $val -eq 10 ];
  
  6 then
  
  7     echo $val
  
  8 fi
  
  9 # if [] ; fi 的格式
  

  
                                                                                                                    5,1          全部
  for语句:
  两种写法
  
  2 #写法一
  
  3 val=0
  
  4
  
  5 for val in {0..100}
  
  6 do
  
  7     echo $val
  
  8 done
  
  9 #写法二
  
  10 val=0
  
  11 for (( val; val

运维网声明 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-557407-1-1.html 上篇帖子: mysql命令行下执行shell命令方法 下篇帖子: shell 监控cpu,memory,load average-Andylinux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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