基本shell编程【1】

” 和 “” 的区别:前者中的字符串被视为纯文本,后者中的特殊字符会被识别,变量会被替换,例如echo “$a”,后者会打印出a的value。

shell的第一行必须是#!/bin/bash (以bash为例,还有其他的shell)。这么做的脚本可以直接以命令行执行./myscript 。 否则需要成为sh的参数,sh myscript。

#表示注释,除了#!(上面讲了)

语句后不需要分号。

  • shell脚本中的系统变量
    $0 这个程序的执行名字
    $n  这个程序的第n个参数值,n=1…9
    $*  这个程序的所有参数
    $# 这个程序的参数个数
    $$ 这个程序的PID
    $! 执行上一个背景指令的PID
    $? 上一个指令的返回值 
 
  • shell脚本中的括号
      上图:date是一个命令。out是一个变量
    
总结: $是取值的意思,${a} $a表示取变量,$(a)表示取命令的执行结果。 ${#a}表示取变量的长度。
 
表示命令的执行结果,有两种方式:使用 `expr 1 + 2 ` 或是$(expr 1 + 2)
 
表示数学运算,可以直接使用 $[ 1 + 2 ] 或是 $(( 1 + 2 )) 或是 let a=1+2  (注意空格!!!!)
上面这句话的意思是a=1 和a = 1的含义是不同的,这对于高级语言的编码人员来讲有点难适应,一般white space都是没有意义的,至少我之前是这么认为。
 
  • 赋值
a=1 注意空格
a=$(ls /home)
 
 
  • 伟大的if 
一段脚本真正有点用处最离不开的是if。
 
接下来开始讲条件,常用的如下:
文件比较运算符
-e filename  如果 filename 存在,则为真 [ -e /var/log/syslog ] 
-d filename  如果 filename 为目录,则为真 [ -d /tmp/mydir ] 
-f filename  如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ] 
-L filename  如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ] 
-r filename  如果 filename 可读,则为真 [ -r /var/log/syslog ] 
-w filename  如果 filename 可写,则为真 [ -w /var/mytmp.txt ] 
-x filename  如果 filename 可执行,则为真 [ -L /usr/bin/grep ] 
filename1 -nt filename2  如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ] 
filename1 -ot filename2  如果 filename1 比 filename2 旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ] 
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法) 
-z string  如果 string 长度为零,则为真 [ -z "$myvar" ] 
-n string  如果 string 长度非零,则为真 [ -n "$myvar" ] 
string1 = string2 如果 string1 与 string2 相同,则为真 [ "$myvar" = "one two three" ] 
string1 != string2 如果 string1 与 string2 不同,则为真 [ "$myvar" != "one two three" ] 
算术比较运算符 
num1 -eq num2 等于 [ 3 -eq $mynum ] 
num1 -ne num2 不等于 [ 3 -ne $mynum ] 
num1 -lt num2 小于 [ 3 -lt $mynum ] 
num1 -le num2 小于或等于 [ 3 -le $mynum ] 
num1 -gt num2 大于 [ 3 -gt $mynum ] 
num1 -ge num2 大于或等于 [ 3 -ge $mynum ]
 
顺便提一下,条件除了被应用于if,还可以用于while。while的结构为
while 条件
do
   echo “haha”
done
原文地址:https://www.cnblogs.com/violinn/p/3083941.html