GCC
gcc main.c -o main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| gcc -E main.c -o main.i gcc -S main.c -o main.s gcc -c main.c -o main.o gcc main.o -o main
gcc -Wall main.c -o main gcc -g main.c -o main
gcc main.c utils.c math.c -o main
gcc main.c -I./include -o main
gcc -DDEBUG main.c -o main
|
Makefile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| CC = gcc CFLAGS = -Wall -g TARGET = main OBJS = main1.o main2.o main3.o
all: $(TARGET)
$(TARGET): $(OBJS) $(CC) $(OBJS) -o $(TARGET)$
%.o: %.c $(CC) $(CFLAGS) -c $< -o $@
clean: rm -f ...
run: ./$(TARGET)
|
调用子目录的Makefile文件:
1 2 3 4 5 6 7 8 9 10 11 12
| CC = gcc TARGET = fibo
all: $(MAKE) -C code $(CC) code/fibo.o code/main.o -o $(TARGET)
clean: rm -f code/*.o
|
$(MAKE): 保证make命令带的参数被传递给子目录的 Makefile
shell
1 2 3 4 5
| #!/bin/bash echo $1 echo $# echo $* echo $?
|
定义函数:
1 2 3 4 5 6 7
| fun() { echo "$1" echo "$2" echo "$#" }
fun 1 str2
|
流程控制语句:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| if <condition> then <command> fi
a=1 if [ $a -ne 1 ]; then echo ok; fi
a=1 while [ $a -ne 10 ] do mkdir file$a let a=a+1 done
|
重定向与管道:
command < input.txt 1>output.txt 2>err.txt
- 标准输出:stdout,由1表示
- 标准错误:stderr,由2表示
- >覆盖,>>追加
command1 | command2 | command3 | ...
cat < my.sh | grep "Hello" > output.txt
sed/awk/grep
sed
- -n 不输出(配合p使用)
- -i 直接修改文件
- -e 多点编辑
- -r 支持扩展正则表达式
- -f 从文件中读取脚本指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| sed '2s/apple/orange/gi' file.txt
sed '2d' file.txt sed '2,5d' file.txt sed '/^$/d' file.txt sed '/error/d' file.txt
sed -n '/root/p' /etc/passwd
sed '$a return 0;' file.txt sed '/error/i WARNING:' file.txt
sed '/windows/c Linux' file.txt
sed -i -e '/^#/d' -e '/^$/d' config.conf
sed -i 's/foo/bar/g' *.txt
|
awk
- $0 整行内容
- $n 第n列
- $NF 最后一列
- $(NF-1) 倒数第二列
- NF 列数
-F 指定分隔符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| awk '{print $1,$3}' file.txt awk '{print NF,$1}' file.txt
awk '{printf "Row: %-3d Name: %-10s\n, NR, $1"}' file.txt
awk '$3 > 100 {print $0}' data.txt awk '$2 == "root" {print $0}' /etc/passwd awk '$3 > 50 && $4 < 100' data.txt
awk '$2 ~ /Smith/ {print $0}' names.txt awk '$3 !~ /[0-9]/' data.txt awk '/start/, /end/ {print $0}' file.txt
|
grep
- -i 忽略大小写
- -v 反向匹配
- -w 全词匹配
- -x 整行匹配
- -n 显示行号
- -c 统计行数
- -r 递归搜索
- –include 指定只搜特定文件
- –exclude 排除特定文件或目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| grep -rn "TODO" . --exclude-dir=.git
grep -vE "^#|^$" /etc/nginx/nginx.conf
grep -c "192.168.1.1" access.log
grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log
grep -e "error" -e "fail" log.txt grep "error" log.txt | grep "database"
|
cut
1 2
| cut -d ',' -f 2 data.csv grep -n "Mark" file.txt | cut -d ':' -f 1 result.txt
|