shell基础笔记1

---恢复内容开始---

1 test命令中不能使用浮点小数值,如:

   A=1.444444;[    $A -gt 1  ]
2 test命令中的>或<必须转义,否则shell会把它们当做重定向符号而把字符串当做文件名来创建,如:[   $A  \>  $B  ]
3 在test命令中大写字母会被当成小于小写字母的,这与sort命令相反。
4 复合条件测试,如:
[ -d  /etc  ]  && [  -f  /etc/passwd  ] 
[  -d /etc  -a   -f  /etc/passwd  ]
[[  -d /etc  &&   -f  /etc/passwd  ]]
 
[  -d  /etc  ]  || [  -f /etc/passwd  ]
[[  -d  /etc  ||  -f  /etc/passwd  ]]
[  -d /etc  -o  -f  /etc/passwd  ]
 
5 if-then语句的高级特性:用于数学表达式的"(( ))";用于高级字符串处理功能(模式匹配)的"[[ ]]"
 
6 for语句都去列表中的复杂值
shell看到了列表之中的单引号并尝试使用他们来定义一个单独的数据值,造成混乱,解决办法:1使用\将单引号转义;2使用双引号来定义用到单引号的值,如:for test in I don\'t  know if  "this'll"  work
如果变量的取值包含空格,要容纳这种值,应将变量用双引号括起来,如:if   [   -f    "$test"   ]
 
c语言风格的for循环:for  ((i=1;i<=10;i++))
                                     do
                                              commands
                                     done
                                     for  ((a=1,b=10;a<=10;a++,b--))
                                      do
                                              commands
                                      done  
 
 
7 命令行参数: $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} 最后一个参数变量值${!#};
$*变量会将所有命令行参数当成一个整体的单个参数,而$@变量会单独处理命令行每个参数。
 
8 echo   -e "\a"       (哗哗声)
    内部变量:计算脚本执行时长$SECONDS
 
9 selsect
select 表达式是一种bash的扩展应用,尤其擅长于交互式使用。用户可以从一组不同的值中进行选择。 
select var in ... ; do 
break 

done 
.... now $var can be used ....

例子: 
 

#!/bin/sh 
echo "What is your favourite OS?" 
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do 
break 
done 
echo "You have selected $var"

该脚本运行结果: 
What is your favourite OS? 
1) Linux 
2) Gnu Hurd 
3) Free BSD 
4) Other 
#? 1 
You have selected Linux
注意:select是扩展应用。


 
10  SECONDS  当前运行的bash进程的运行时间(以秒为单位)
11  在同一行里用空白字符隔开为多个变量赋值是可以的。
如果给变量赋的值中有空白字符,引号是必须的。
从字符串的右边结尾处提取?echo ${stringZ:  -4}

12 子串替换:

${string/substring/replacement}

用$replacement替换由$substring匹配的字符串。

${string//substring/replacement}

用$replacement替换所有匹配$substring的字符串。

   1 stringZ=abcABC123ABCabc
   2 
   3 echo ${stringZ/abc/xyz}           # xyzABC123ABCabc
   4                                   #用'xyz'代替第一个匹配的'abc'.
   5 
   6 echo ${stringZ//abc/xyz}          # xyzABC123ABCxyz
   7                                   # 用'xyz'代替所有的'abc'.
${string/#substring/replacement}

如果$string字符串的最前端匹配$substring字符串,用$replacement替换$substring.

扫描二维码关注公众号,回复: 4187931 查看本文章
${string/%substring/replacement}

如果$string字符串的最后端匹配$substring字符串,用$replacement替换$substring.

   1 stringZ=abcABC123ABCabc
   2 
   3 echo ${stringZ/#abc/XYZ}          # XYZABC123ABCabc
   4                                   # 用'XYZ'替换前端的'abc'.
   5 
   6 echo ${stringZ/%abc/XYZ}          # abcABC123ABCXYZ
   7                                   # 用'XYZ'替换后端的'abc'.
   
13   while (( a <= LIMIT )) # 双圆括号, 变量前边没有"$".
14  生成指定范围的随机数和字符串,脚本如下:
#!/bin/bash  
count=$[$2-$1+1]
#num=$(date +%s%N)
echo $[$RANDOM%$count+$1]
 
#使用date 生成随机字符串  
date +%s%N | md5sum | head -c 10 
#使用 /dev/urandom 生成随机字符串  
cat /dev/urandom | head -n 10 | md5sum[cksum] | head -c 10
#使用命令expect包提供的复杂密码生成工具mkpasswd
# echo $RANDOM | md5sum
 
15 wc -c 命令计算字符长度时会加上单词间空格,制表符,换行符
16  date -d "1 day ago" +'%Y-%m-%d' 或 date --date="1 day ago" +'%Y-%m-%d'
      date -d "10 day ago" +'%Y-%m-%d'
      date -d "1 month ago" +'%Y-%m-%d'
      date -d "1 year ago" +'%Y-%m-%d'
 
17 command1 || {
                            command2;command3;......
                             }
 
 
18  if  command1;command2;command...
         then
                 ....
      fi

---恢复内容结束---

猜你喜欢

转载自www.cnblogs.com/as007012/p/10002873.html