很想好好用好linux,但是我的台式的显示器很是问题,或许我努力查查问题,它将不是问题。
linux的一些特点,我想自己在使用linux的时候能够有一些感受
Everything (including hardware) is a file
所有的事物(甚至硬件本身)都是一个的文件。
Configuration data stored in text
以文本形式储存配置数据。
Small, single-purpose program
程序尽量朝向小而单一的目标设计
Avoid captive user interfaces
尽量避免令人困惑的用户接口
Ability to chain program together to perform complex tasks
将几个程序连结起来,处理大而复杂的工作。
Small is beautiful.
Make each program do one thing well.
Build a prototype as soon as possible.
Choose portability over efficiency.
Store data in flat text files.
Use software leverage to your advantage.
Use shell scripts to increase leverage and portability.
Avoid captive user interfaces.
Make every program a filter.
awk学习:http://coolshell.cn/articles/9070.html & the awk programming
现在工作主要做日志分析,所以awk用到比较多,也非常神奇的感觉到它的强大, 日志过滤,拆分,提取,模式匹配&分析判断
linux一些基本知识:http://coolshell.cn/articles/8883.html
TCP/IP看得我太晕乎乎了,明天就从看awk和linux开始吧。刚好工作中也正需要。
上上周周末将shell学习了下,现在对其进行简单地整理。
对常用的语法记录下来,关键在于会用其来解决一些问题。当遇到问题,如何借助身边的资源来解决相关的问题。
1. shell的变量和数组
shell的变量无需进行声明,默认其为字符串变量。所以当使用字符串常量(若字符串常量中不含空格),有时候不需要引号。但是当需要进行算术运算的时候,需要进行特别处理,因为shell默认字符串处理,a=1+1,不会理解为a=2,而是字符串1+1.为了区分变量名和字符串,会在变量前加一个$的符号。
shell的普通数组
普通数组使用()来进行声明。并且
shell的关联数组使用declare -A arr_name来完成
2. shell的基本运算
赋值运算
shell的执行都是以空格为分段来执行一个命令。所以赋值运算的等号的左右不能含有空格。
算术运算
由于shell默认的变量类型为字符串,如果需要做数学运算,有几种方法,
一种方法是let和bc命令。
一种方法是双括号
关系运算
shell中存在算术比较运算,字符串比较运算以及文件判断运算。这些运算常用在if的判断中,作为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 可执行,则为真 | [ -x /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 ] |
逻辑运算
3. shell的控制循环
条件控制
1
2
3
4
5
|
if [ $a -ne 10]; then
echo yes
else
echo no
fi
|
for循环和while循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#批量重命名文件
for file in `ls`
do
mv -f $i `echo ${i} | sed 's/weibo/weibo_ios/g'`
done
#使用while读取文件
while read line
do
flag=$[ $i % 4 ]
if [ $flag -eq 1 ];then
tempTime=$line
elif [ $flag -eq 2 ];then
tempTitle=$line
elif [ $flag -eq 3 ];then
tempLink=$line
elif [ $flag -eq 0 ];then
tempDispatchId=$line
time_link_arr[${tempTime}]=$tempLink
time_did_arr[${tempTime}]=$tempDispatchId
time_title_arr[${tempTime}]=$tempTitle
fi
i=$[ $i+1 ]
done < ${tempFileName}
|
4. shell的函数、参数,返回值,获取日期
shell的函数的声明方式function func_name()。 在函数名称后的括号里面不添加参数。参数以$1,$2等方式进行传递。函数的返回值为$?,函数的参数的个数为$#。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#求n的阶乘
function factorial()
{
n=$1
if [ $n -eq 1 ]; then
return 1
else
factorial $(($n-1))
b=$?
echo $b
return $((${b}*$n))
fi
}
|
5. shell的文件判断
shell的数组与函数等,好好的梳理下
$n $1 the first parameter,$2 the second…
$# The number of command-line parameters.
$0 The name of current program.
$? Last command or function’s return value.
$$ The program’s PID.
$! Last program’s PID.
$@ Save all the parameters.