linux shell脚本-1

1.1 终端打印——echo、printf

1、 echo 双引号、单引号:注意加转义字符;无引号:注意分号

  printf "%-5s %-10s %-4s\n" No Name Mark

  echo -e "包含转义序列"

echo -e "\e[1;31m This is red text \e[0m"

  效果:

  其他颜色:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=35,青色=36,白色=37

  echo -n 忽略末尾的换行符(echo默认会将一个换行符追加到输出文本的尾部)


1.2 变量和环境变量

  1、查看

  env

  cat /proc/$PID/environ

  2、可以在双引号中引用变量值($value) 

  3、export设置环境变量

  4、获得字符串长度:length=${#var}

  5、SHELL表示用的是哪种shell,UID用来判断是否是超级用户(0是root)


 

 1.3 通过shell进行数学计算

  1、let命令可以直接执行基本的算术操作,当使用let时,变量之前不需要再加$

let result=no1+no2
let no1++
let no2--

  2、其他方法

  []  (())  expr

result=$[no1+no2]
result=$[$no1+5]
result=$((no1+50))
result=`expr 3+4`
result=$(expr $no1+5)

  以上方法只能用于整数运算,而不支持浮点数(老实说,对着几个符号没弄懂)

  3、bc

  


 1.4 文件描述符和重定向

  1、tee命令可以接受到来自stdin的数据。它将stdout的一份副本写入文件out.txt,同时将另一份副本作为后续命令的stdin;cat -n将从stdin中接受到的每一行数据前加上行号并写入stdout:

[pocean@node235 memtrace]$ cat 1.txt | tee out.txt | cat -n
     1    a
     2    ab
     3    abc
     4    abcd
     5    abcde
[pocean@node235 memtrace]$ cat out.txt 
a
ab
abc
abcd
abcde

  另外tee命令会将文件覆盖,但它提供了一个-a选项,可以用于追加内容。

  

 


1.5 数组和关联数组

array_var=(1 2 3 4 5)

或者:
array_var[1]="test1"
array_var[2]="test2"
array_var[3]="test3"
array_var[4]="test4"

echo ${array_var[0]}
echo ${array_var[*]}
echo ${array_var[@]}
[pocean@node235 ~]$ declare -A ass_array
[pocean@node235 ~]$ ass_array=([apple]='100 dollars' [orange]='150 dollars')
[pocean@node235 ~]$ echo "Apple costs ${ass_array[apple]}"
Apple costs 100 dollars
[pocean@node235 ~]$ echo ${ass_array[*]}
150 dollars 100 dollars
[pocean@node235 ~]$ echo ${!ass_array[*]}
orange apple

1.6 别名

  通过\cmd可以将所要运行的命令进行转义,从而忽略当前定义过的所有别名。

1.7 获取终端信息——tput

  比如行数、列数、光标位置、遮盖密码字段等,详细使用自行google

1.8 调试

  -xv

1.9 函数和参数

  $n 第n个参数,$@ 被扩展成$1 $2 $3

  $? 上个命令的返回值(0表示成功,非0表示失败)

1.10 利用子shell生成一个独立的进程

  子shell本身就是独立的进程。可以使用()操作符来定义一个自shell:

pwd;
(cd /bin;ls);
pwd;


1.11 以不按回车键的方式读取字符

[pocean@node235 ~]$ read -n 3 var #输入n-1个数
1 2[pocean@node235 ~]$ echo $var
1 2
[pocean@node235 ~]$ read -s var #密码输入
[pocean@node235 ~]$ echo $var
123456
[pocean@node235 ~]$ read -p "Enter input:" var #提示输入
Enter input:123789
[pocean@node235 ~]$ echo $var
123789
[pocean@node235 ~]$ read -t 3 var #3秒内输入
3[pocean@node235 ~]$ read -d ":" var #到:符号时停止输入
hello:[pocean@node235 ~]$ echo $var
hello

 


1.12 IFS 内部定界符

data="name,sex,rollno,location"
oldIFS=$IFS
IFS=,
for item in $data
do
    echo Item: $item
done

IFS=$oldIFS

1.12 循环

for var in list;
do
commands
done
list can be a string, or a sequence
while condition
do
commands
done

1.13 比较与测试

  if语句

if condition;
then
commands;
fi


if condition;
then
commands;
elif condition;
then
commands
else
commands
fi

  算术比较

  条件通常被放置在封闭的中括号内。一定要注意[或]与操作数之间有一个空格。如果忘记了这个空格,脚本就会出错。

  [ $var -eq 0 ]  [ -f/x/e/c/b/w/r/L file ]

  一些操作符:

  -ne:等于  -gt:大于  -lt:小于  -ge:大于或等于  -le:小于或等于

  -a:逻辑与  -o:逻辑或

  字符串比较最好用双中括号:

  [[ $str1=$str2 ]]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2014-03-13 21:49  pocean  阅读(200)  评论(0编辑  收藏  举报