shell脚本

apt-get -f install=apt-get install -f ,
是修复依赖关系(depends)的命令,就是假如你的系统上有某个package不满足依赖条件,这个命令就会自动修复,安装那个package依赖的package。
.deb:
安装 sudo dpkg -i XXX.deb
查看已安装的软件: sudo dpkg -l
卸载:  sudo dpkg -r

按向上箭头键,便 可以在命令行上逐次显示各条命令。同样,按向下箭头键可以在命令列表中向下移动
在输入命令的任何时刻,可以按键,当这样做时,系统将试图补齐此时已输入的命令

ctrl + c终止shell命令

环境变量:

使用 env 或者 printenv 命令可以查看系统全部的环境变量设置
使用 echo 命令可以查看某个具体环境变量的值

修改环境变量:
1.临时修改:
$ 变量=$变量:新增加变量值
或
$ export 变量=$变量:新增加变量值
vmuser@Linux-host: ~$ export PATH=$PATH:/opt/usr/bin
2.永久修改:修改配置文件
修改/etc/profile 文件会影响使用本机的全部用户;
修改~/.bashrc 则仅仅影响当前用户;

常见shell 命令

1.ls:空,列出所有非隐藏文件
-a	列出所有文件包括隐藏文件
-l 列出所有文件包括长度,拥有者,权限和时间戳等信息
-t 按文件最后修改时间列出文件
-F 按类型列出所有文件	/表示目录 *表示可执行文件	@表示链接文件

2.改变当前目录(cd):
cd [目的目录名] 
/ 根目录 (.)当前目录 (..)上一层目录  ~ 用户主目录  - 上一次工作目录

显示当前所在目录(pwd):
linux@ubuntu:~$ pwd

3.创建目录/文件(mkdir):
mkdir [新目录名]
-m 同时设置文件权限	-p 设置多级目录
文件:
touch file.txt
echo "some line" > file.txt
fallocate -l 1G file.txt 分配大小

查看文件类型:file
cat >file.txt	cat file.txt 查看文件内容
-n 对内容进行编号输出	-b编号但忽略空白行
(>)重定向符:标准输出到文件,文件不存在会创建文件
(>>)定向追加到文件末尾,文件不存在会创建文件


4.删除一个目录/文件(rm):
-r:完全删除目录,就其下的目录和文件也一并删除
-i:在删除目录之前需要确认
-f:强制删除

5.拷贝文件/目录(cp):
-r:此参数是用来将一目录下的所有文件都复制到另一个指定目录中
-p:保留权限模式和更改时间
-i:采用-i 选项时,当指定目录下已存在被复制的文件时,会在复制之前要求确认是否要覆盖,如使用者的回答是 y(yes)才执行复制的动作

6.建立文件的符号链接(ln):
ln [-s] [源文件] [目标文件]	相当于快捷方式,同步变化

7.改变文件/目录访问权限(chmod):
chmod [XYZ] 文件	X、Y、Z 分别表示 User(用户)、Group(同组用户)及 Other (其他用户)对				   于该文件的使用权限,一个文件有可读(r=4)、可写(w=2)、可执行(x=1)3 种模				   式
linux@ubuntu:~$ chmod 751 /home/linux/test
改变文件/目录的所有权:
chown [-R] 用户名 文件/目录

7.添加/删除用户:
# adduser user1,由具有 root 权限的用户添加用户 user1; 
# userdel user2,由具有 root 权限的用户删除用户 user2;
设置用户口令
sudo passwd root
进入root:su

8.文件的打包和压缩(tar):
打包:
将/home/tmp 目录下的文件打包为 test.tar:
linux@ubuntu:~$ tar -cf test.tar /home/tmp
将所有的 jpg 文件添加到 test.tar 包里面去:
linux@ubuntu:~$ tar -rf test.tar *.jpg
列出包文件的所有内容:
linux@ubuntu:~$ tar -tf test.tar
从 tar 包文件中恢复所有文件,解包:
linux@ubuntu:~$ tar -xf test.tar
压缩:
linux@ubuntu:~$ tar –czf test.tar.gz *.jpg	将所有jpg文件打包并用gzip压缩
linux@ubuntu:~$ tar –xzf test.tar.gz	解压
linux@ubuntu:~$ tar -cjf test.tar.bz2 *.jpg	将所有jpg文件打包并用bzip2压缩
linux@ubuntu:~$ tar -xjf test.tar.bz2	解压

9.文件移动改名:
$mv 源文件/目录 目的文件/目录
$ mv other/ nwedir	改名

10.安装和卸载文件系统:
文件挂载:
# mount [-参数] [设备名称] [挂载点]
-w 可写方式挂载(默认)	-r 可读 -v显示详细安装信息 -t<文件系统类型>
root@EasyARM-iMX28x ~# mount -t nfs 192.168.1.138:/home/chenxibing/lpc3250 /mnt -o nolock #将远程共享目录挂载到嵌入式系统本地
nolock 表示禁用文件锁,当连接到一个旧版本的 NFS 服务器时常加该选项
文件卸载:
#umount 挂载点

11.文件搜索:
$ find 路径 –选项其它
vmuser@Linux-host: ~$ find arch/arm/ -name mux*.c	#-name 按文件名搜索 mux*通用符模糊搜索
字符串搜索:grep
vmuser@Linux-host: ~$ grep “pcf8563” -R arch/arm 
“-R”表示进行递归查找,而不是仅仅在指定的目录下查找
diff 命令:生成源代码补丁
diff [命令行选项] 源文件 新文件
linux@ubuntu:~$ diff -ruN test1.txt test2.txt > test.patch
比较两个文件的不同生成patch文件

patch 命令:打补丁
patch [命令行选项] [patch 文件 ]
linux@ubuntu:~$ patch -p1 test2.txt test.patch
-pn 表示patch文件名左边目录的层数,-p1表示patch文件放在要被打补丁目录下

ps 显示当前进程的状态:
ps -A 列出所有的进程
ps -ef //显示所有命令,连带命令行
ps -ef | grep 进程关键字		grep查找文件中符合条件的字符串
配置、编译、安装源码包软件:
linux@ubuntu:~$ ./configure --prefix=/home/tmp  //指定文件目录
linux@ubuntu:~$ make 
linux@ubuntu:~$ make install

往内核加载/卸载模块:
insmod(添加模块)指令:
insmod [-fkmpsvxX] [-o<模块名称>] [模块文件]
rmmod(卸载模块)指令:
rmmod [-as] [模块名称…]
lsmod 查看已经加载的模块
# modprobe [选项] 模块 [符号=值]
modprobe 命令集加载/卸载功能于一身,并且可以自动解决模块的依赖关系
创建设备节点:
# mknod 设备名 设备类型 主设备号 次设备号
# mknod /dev/led c 231 0

重启:reboot 关机:poweroff
文件同步:sync

网络操作命令:

ifconfig:

选项/参数说明示例
-a查看系统拥有的全部网络接口ifconfig -a
网络接口指定操作某个网口ifconfig eth0 192.168.1.136
broadcast设置网口的广播地址ifconfig eth0 broadcast 192.168.1.255
netmask设置网口的子网掩码ifconfig eth0 netmask 255.255.255.0
hw ether设置网卡物理地址(如果驱动不支持则无效)ifconfig eth0 hw ether 00:11:00:00:11:22
up激活指定网卡ifconfig eth0 up
down关闭指定的网卡ifconfig eth0 down

ping:

通常情况下只能 ping 同网段的主机,不能跨网段ping操作。

shell脚本的编写

shell脚本的执行:
(1)设置好脚本的执行权限之后再执行脚本:
linux@ubuntu:~$chmod +x MyScript 	[u+x]:只有自己可以执行	[ug+x]:自己和群组内										[x]:都可执行
linux@ubuntu:~$./Myscript
(2)使用 Bash 内部指令"source":
linux@ubuntu:~$ source Myscript
(3)直接使用 sh 命令来执行:
linux@ubuntu:~$ sh Myscript

#!/bin/bash		#! 告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell
echo "Hello World !"	输出

注释:
行注释:#
多行注释:
	:<<EOF
	注释内容...
	注释内容...
	注释内容...
	EOF
EOF可以用'或!代替
shell变量:
your_name="qinjx"	变量名和等号之间不能有空格;
					只能使用英文字母,数字和下划线,首个字符不能以数字开头;					
echo $your_name		在变量前面加美元符号使用变量
echo ${your_name}	花括号可省,用来区分变量边界

readonly your_name	使变量只读
unset variable_name	删除变量

字符串:单引号或双引号
your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

hello, runoob ! hello, runoob !	
hello, runoob ! hello, ${your_name} !
双引号中可以出现变量,单引号中不可以出现变量

获取字符串长度:
string="abcd"
echo ${#string} #输出 4

提取子字符串:
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
数组:
bash支持一维数组(不支持多维数组),没有限制大小;数组元素的下标由 0 开始编号

定义数组:
用括号来表示数组,数组元素用"空格"符号分割开
array_name=(value0 value1 value2 value3)
或者
array_name=(
value0
value1
value2
value3
)
array_name[n]=valuen	#单独定义

读取数组:
valuen=${array_name[n]}
使用 @ 或*符号可以获取数组中的所有元素:
echo ${array_name[@]}

获取数组的长度:
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
传递参数:
echo "example"
echo "$0"	执行的文件名
echo "$3"	第三个参数
echo "$1"	第一个参数
echo "$#"	参数个数
echo "$*"	引出所有参数 "1 2 6"
echo "$@"	引出所有参数 "1" "2" "6"
echo "$?"	最后命令的退出状态。0表示没有错误
echo "$$"	脚本运行的当前进程ID号
echo "$!"	后台运行的最后一个进程的ID号
echo "$-"	显示Shell使用的当前选项,与set命令功能相同
运算符:
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr最常用
val=`expr 2 + 2`	#注意使用的是反引号 ` 而不是单引号 '
					#表达式和运算符之间要有空格
val=`expr $a \* $b`	#乘号(*)前边必须加反斜杠(\)才能实现乘法运算
if [ $a == $b ]		#必须空格
then
fi

假设a=10,b=20
关系运算符:	只支持数字,除非字符串的值是数字
-eq	两个数是否相等
-ne	两个数是否不相等
-gt	左边大于右边?
-lt	左边小于右边?
-ge	左边大于等于右边?
-le	左边小于等于右边?
布尔运算符:
! -非	     [ ! false ] 	
-o -或		  [ $a -lt 20 -o $b -gt 100 ] 
-a -与		  [ $a -lt 20 -a $b -gt 100 ]
逻辑运算符:
&& -AND			[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||	-OR			[[ $a -lt 100 || $b -gt 100 ]] 返回 true

字符串运算符:
=	检测两个字符串是否相等,相等返回 true
!=	检测两个字符串是否不相等,不相等返回 true
-z	检测字符串长度是否为0,为0返回 true
-n	检测字符串长度是否不为 0,不为 0 返回 true
$	检测字符串是否为空,不为空返回 true

文件检测运算符:
-b file	-c file	-d file ......
echo:
echo "\"It is a test\""
输出结果:
"It is a test"

echo -e "OK! \n" # -e 开启转义
echo "It is a test"
输出结果
OK!
It is a test

echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"
输出结果:
OK! It is a test

echo "It is a test" > myfile	#显示结果定向至文件

echo `date`	#显示命令执行结果
printf
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
if条件语句:
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi
写成一行:
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

case...esac条件语句:
casein
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

for循环:
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done
写成一行:
for var in item1 item2 ... itemN; do command1; command2… done;

while循环:
while condition
do
    command
done

until循环:
until condition
do
    command
done

break continue
函数:shell函数要在文件前面被定义
fun(){
	echo "输入第一个数字:"
	read Num1
	echo "第一个参数$1"
	echo "第十个参数$10"
	echo "第十个参数${10}"	#从10开始的参数要加{}
	return $(($Num1+$1))
}
fun 5 4 2 3 4 8 5 2 4 3 4
echo "输入两数之和为$?"	#$?获取函数返回值,只对上面一行生效
输入/输出重定向:
command < infile > outfile 表示重定向到file,内容被替换
command << infile >> outfile 追加重定向到file

0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)
$ command > file 2>&1	#将 stdout 和 stderr 合并后重定向到 file

$ command > /dev/null	#/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃,禁止输出

command << delimiter
    document
delimiter
将两个 delimiter 之间的内容(document) 作为输入传递给 command
$ wc -l << EOF
    欢迎来到
    菜鸟教程
    www.runoob.com
EOF
3          # 输出结果为 3 行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值