linux shell
sudo date -s "2018-06-02 16:59:00" 修改系统时间
#!/bin/bash 此行称为 shebang(就是 sharp (#) + bang (!) 的意思),会指引操作系统使用接下来指定的程序运行此文件。此处 /bin/bash 执行我们的文件。 一些人使用 #!/bin/sh 来让 sh 执行文件,按照习惯这表示任何支持 POSIX shell 命令语言的 sh程序。 a="hello world" # 等号两边均不能有空格存在 printf '%s\n' "A is: $a" # A is: hello world num=2 echo "this is the $numnd" # 输出 this is the — shell 尝试寻找 $numnd 的值 echo "this is the ${num}nd" # 输出 this is the 2nd — 修好了! # 花括号可以隔开变量名,但是放歪了的话… echo "this is the {$num}nd" # 输出 this is the {2}nd — 切是切开了,但是…
变量算术
Shell 变量默认都是字符串。这也就是说,你尝试这么做,肯定没用: var=1 var=$var+1 echo $var # 输出 1+1 bash 里面可以用 (( )) 或者let执行C风格的算术表达式。但是sh里面不会识别 #!/bin/bash a=6 ((a++)) echo $a #7 a=6 ((a= a* a)) #36 echo $a var=4 let 'var = var / 3' # 这个也属于bash扩展 $(( )) 会展开成为这个 C 表达式求值的结果。这个是sh通用的 #!/bin/sh a=6 echo $((a +1)) #7 以前还有人用 expr 之类的外部程序来,不过这属于杀鸡用牛刀。并且调用外部程序浪费时间性能差。 var=1 var=$(expr "$var" + 1) # expr 收到三个参数 '1' '+' '1', # 按照 expr --help 里面写的方法运行 # 然后输出替换掉 $() 这里变成 var=2。 var=`expr "$var" + 1` # 前面一行的老写法,千万千万不要学。
大多数情况下,可以使用测试命令来对条件进行测试,比如可以比较字符串、判断文件是否存在及是否可读等等 -f "filename" 判断是否是一个文件 -x "/bin/ls" 判断/bin/ls是否存在并有可执行权限 -n "$var" 判断 $var 变量是否有值 "$a" == "$b" 判断$a和$b是否相等 前者可以使用 help [[ 查询用法,后者使用 help [ (bash) 或 man test 查询
&& 和 || 操作符
[ -f "/etc/shadow" ] && echo "This computer uses shadow passwords"
[ -r "$mailfolder" ] || { echo "Can not read $mailfolder"; exit 1; }
单引号可以防止特殊符号扩展
echo $SHELL # => /bin/bash
echo "$SHELL" # => /bin/bash
echo '$SHELL' # => $SHELL
此外还有一种防止这种扩展的方法,即使用转义字符——反斜杠\:
echo \*.jpg # => *.jpg
echo \$SHELL # => $SHELL
case 语句 case表达式可以用来匹配一个给定的字符串,而不是数字(可别和C语言里的switch...case混淆)。 #!/bin/bash ftype="$(file "$1")" case "$ftype" in "$1: Zip archive"*) unzip "$1" ;; "$1: gzip compressed"*) gunzip "$1" ;; "$1: bzip2 compressed"*) bunzip2 "$1" ;; *) echo "File $1 can not be uncompressed with smartzip";; esac #!/bin/bash a=6 case $a in "1") echo "this is 1";; "2") echo "this is 2";; "3") echo "this is 3";; *) echo "this is unknown";; esac

浙公网安备 33010602011771号