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

 

posted @ 2017-10-16 09:43  牧 天  阅读(197)  评论(0)    收藏  举报