`
liang3307
  • 浏览: 13239 次
  • 性别: Icon_minigender_1
  • 来自: 浙江
社区版块
存档分类
最新评论

shell脚本学习笔记

阅读更多

       平时接触了主机,有空就系统整本书的看下。总感觉这种脚本没有java或c语言那样很规范的语法,它的实现感觉有些随意,通过一些写法的技巧轻易的解决事情,随意自然轻巧,也许这就是linux这种开源东西的优势吧。

 

ubuntu 中文乱码
如果使用的是 PuTTY,可以通过修改 font, character set 设置来解决。
Window -> Appearance -> Font settings 选择宋体或新宋体:
Window -> Translation -> Character set translation on received data 选择 UTF-8:

--ubuntu
--设置root密码
sudo passwd root
sudo /etc/init.d/ssh star

 

startx--启动图形界面
cal 2002--查看2002年日历
man date/info date --查询date指令的使用
who --查看当前用户
netstate-a --查看当前网络情况
ps -aux --查看后台执行的程序
shutdown/reboot --关机
reboot -f 强制重启

--改变一个文件的群组
chgrp 群组名 文件
chown -R tomcat /home/tomcat/


--8080端口映射到80端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000

--设置ip地址
 10.8.6.247
cat /etc/sysconfig/network-scripts/ifcfg-eth0
--列子
DEVICE=eth0
BOOTPROTO=static
HWADDR=E4:1F:13:38:5E:60
IPADDR=10.26.88.205
NETMASK=255.255.255.192
GATEWAY=10.26.88.254
ONBOOT=yes
TYPE=Ethernet

--重启ip设置
/etc/init.d/network restart

--查看这个目录下的文件大小
du -m /home/tomcat


--修改linux启动默认
/etc/inittab 的id:5:initdefault:
init[012356]
0: 关机
1:单用户
2:多用户网络没有网络服务
3:多用户网络有网络服务
5:图形界面
6:系统重启

 

--切换账户 报open to many
su: /bin/bash: Too many open files in system
vi /etc/sysctl.conf
fs.file-max = 6553600
最后退出输入回车

--vi使用
复制:yy
粘贴:p

删除:dd


--服务器间的数据copy
scp jdk-6u16-linux-x64.bin root@10.26.88.204:/usr

--代码更新
cp -r src/* target/xxt


修改文件名:
mv 原来文件名,修改后的文件名

--启动ftp
service vsftpd start
service sshd start
chkconfig sshd on

ftp ip
get 文件名   --下载文件
delete 文件名 --删除文件
bye   --退出


linux jdk设置
chmod +x jdk-6u17-linux-i586.bin

cat /etc/profile
export JAVA_HOME=/usr/jdk1.6.0_17
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export LANG='zh_CN'


/usr/java
--创建账户
useradd  账户名
useradd -G dba vas
passwd 账户名

usermod 修改用户
passwd root

killall 进程名


--查看字符集
locale


--创建文件
touch filename

--创建文件夹
mkdir filename

--查看ip,mac地址
/sbin/ifconfig


--修改时间
date -s 2011-01-25
date -s 02:23:30
clock -w
clock -r
clock -hwtosys

 

--挂载文件
mount
--挂载光盘
mount /mnt/cdrom
unmount

--查看分区
fdisk -l
window linux 安装系统删除linux
fdisk /mbr

--查看当前运行的shell
env
--切换shell
chsh -s /bin/csh

--追踪路由命令
tracert www.sina.com

--安装tar.gz文件
tar -zxvf qbittorrent-2.4.4.tar.gz

tar -zxvf apache-tomcat-5.5.33.tar.gz

 

--rpm 安装
--安装软件:
rpm -ivh  MySQL-clinet-community-5.1.52-1.rhel3.i386.rpm  MySQL-server-community-5.1.52-1.rhel3.i386.rpm
--查询是否有该软件
rpm -qa|grep name
rpm -qa name

--卸载软件 rpm -e name
--强制卸载 rpm -e --nodeps name

--任务调度
--启动任务调度 一般不需要手动调用下面
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

--任务编辑 crontab -e
--任务删除 crontab -r
--任务列表 crontab -l


--网络命令

 netstat -anp
--显示本机到远程主机的历程名称 tracerout
netstat -anp | grep '8000' | wc -l

--建立超链接
ln -s 源 目标

--字符查找
grep -n  "java"   /home/tomcat/*
grep 参数:
-i 大小写
-v 显示不匹配的行

 

--宏定义
alias l='ll -t'

查看物理CPU的个数
cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l
 
查看逻辑CPU的个数
cat /proc/cpuinfo |grep "processor"|wc -l
 
查看CPU是几核
cat /proc/cpuinfo |grep "cores"|uniq

--cpu信息
more /proc/cpuinfo
--位数
getconf LONG_BIT


--wc 统计文本数
行数(line),字数(word),字符数(character)


--安装ssh
sudo apt-get install openssh-server

负载里面的 1分钟、5分钟、15分钟的数字 ,1分钟 当前的数字 除以 核数>=5 就表示 服务器需要升级 或者优化

释放内存:echo 3 >/proc/sys/vm/drop_caches

 

--shell脚本文件的常用命令
幻行,使用该sh
#!/bin/sh

#不可变变量
readonly 变量名

#删除变量,函数
unset 变量名

#数组
a[0]='a0'
a[1]='a1'
a[2]='a2'
#访问索引1
echo "${a[1]}"
#访问数组中的所有变量
echo "${a[*]}"
echo "${a[@]}"


#变量置换

#缺省值置换 param为空或未赋值,word取代param,param不变
${param:-word}

#缺省值赋值 param为空或未赋值,word赋值param
${param:=word}

#空值错误 如果为空,错误提示信息  
${param:? 'msg'}

#有值置换
${parame:+msg}

#命令置换 命令获取的数据存放到变量中
DATE=`date`

#算式置换 完成简单的运算
echo $(( 5*2 ))

 

#输出命令的路径
type cmd

 

#睡眠时间 单位:秒
sleep 2

#find
cd ~ && find .. -name memcached -print 2>/dev/null
-name 文件名 可用正则

 

-type 类型
   f 通常文件
   d 目录
   b 块设备
   c 字符设备
   l 符号链接
   p 命名管道
-mtime 修改时间
-atime 访问时间
-ctime 改变时间
  +n 大于n天 -n 小于n天 n 等于n天
-size 磁盘块
-exec 后面执行命令 得到的查询结果{}

cd ~ && find /home/zyl/tmp -name a.txt 2>/dev/null -print -exec rm -rf {} \;
find . ! \( -name memcached -o -type f \) -print 2>/dev/null

find   ./   -size   +100000k   -print

--xargs
数据传递给后面执行命令充当参数

--expr 简单的整数运算
expr 1 + 2  #需要有空格 不然当成一个字符串
--expr 使用正则,返回匹配的字符数
abc=12345abc
expr $abc : '[0-9]*'
$(( 1+2 ))

--bc 计算器
bc
obase :输出进制
ibase :输入进制
 

printf
s:字符串
c:字符
d:十进制
x:十六进制
o:八进制
e:指数
f:固定浮点数
g:紧密浮点数
默认右对齐,-左对齐

printf "%16s\t%16s\n" "name"  "user name"
printf "%16s\t%16s\n" "str1"  "ranga"
printf "%16s\t%16s\n" "str2"  "zhang"
{ date; uptime; who; } > a.txt

 

--同时在控制台和文件中输入
cmd | tee a.txt

ls << aa
-l
aa

--用户输入
read name
echo $name
--表示不输出输入的字符串
stty -echo
read name
stty echo #输出输入的字符串

--文件描述符 重定向
date 1>a.txt 2>&1
0:stdin
1:stout
2:sterr

>dev/null 表示丢弃输入文件
--定向到同一个文件
 1>a.txt 2>&1

--关闭定向
 6>-

--查看文件信息
file fileName

--超级链接
硬链接 ln src target
符号链接 ln -s src target


-- 前台进程变成后台进程,进程 ctrl+z 后输入bg变成后台运行。bg %1
-- 后台进程变成前台进程, fg %1

--一些不好后台运行的,关闭终端时候自动结束可以用 nohup 运行
nohup ls &
输出日志到 nohup.out


[tomcat@wxxyweb ~]$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
tomcat    9545  9379  0 May29 pts/1    00:00:00 -bash
tomcat    9597  9545  0 00:07 pts/1    00:00:00 ps -f
uid:运行程序的账户
pid:进程标识符
ppid:parent pid
c:cpu占有率
unlabeled:精确值,优先级
STIME:启动时间
cmd  执行的命令

--shell 版本
echo $BASH_VERSION

echo $PWD;--路径
echo $UID;--用户编号
echo $SHLVL;--自动加1
echo $REPLY;--读到输入的第一行
echo $RANDOM;--0到32767的随机数
echo $SECONDS;--shell 启动的花费的时间
echo $IFS;  --分离,不清楚
echo $PATH; --path路径
echo $HOME; --home

if [ "$a" = "start" ];then
  echo "Start"
elif [ "$a" = "start2" ];then 
  echo "start2"
else
  echo "no start"
fi


--判断文件
if [ -f /home/zyl/zyl.sh ];then

-b file 存在并且是块文件
-c file 存在并且是字符文件
-d path 存在并且是一个目录
-e path 文件或目录
-f file 存在并且是正规文件
-g path 存在文件夹并且设置了sgid
-h file 存在并且是链接
-k path 文件或目录存在,并且设置了粘泻位
-p file 存在并且是命名管道
-r path 文件或目录可读
-s file 文件大小大于0
-u path 设置了suid
-w path 可写
-x path 可执行
-o path 当前进程有效用户id所拥有

--字符判断 = 两边需要有空格
if [ "$a" = "$b" ];then   
-z str  长度为0
-n str  长度不0
str1=str2
str1!=str2

--数字比较
if [ $a -eq $b ];then
int1 -eq int2  等于
int1 -nq int2  不等于
int1 -lt int2  小于
int1 -le int2  小于等于
int1 -gt int2  大于
int1 -ge int2  大于等于

--判断上一个命令是否执行成功,临时变量写入 $?
pwdd
if [ $? -eq 0 ];then

复合比较
!expr
expr1 && expr2
expr1 || expr2
--列子
! [ $a -eq $b ]
[ ! $a -eq $b ]
# -a = and
# -o = or
[ -d "$a" -a "$a" = "$b" ]
[ -d "$a" ] && [ "$a" = "$b" ]

--case语法
case "$a" in
    "a") echo "aa";;
    "b") echo "bb";;
    *a*) echo "*a*";;
    *) echo "default";;
esac


--while 语法
x=0
while [ $x -lt 10 ]
do
echo $x
x=`expr $x + 1`  #`符号是在~按键上
done

输入重定向
while read LINE
do
case $LINE in
*root*) echo "root $LINE";;
esac
done < /etc/passwd

while : #无限循环

break,countinue

--until 直到 true 结束 和while相反
x=0
until [ $x -gt 10 ]
do
echo $x
x=`expr $x + 1`
done

--for 语法
for p in $*
do
echo "$i=$p"
i=`expr $i + 1`
done

for i in /home/tomcat/*

--select
PS3="select menu"  #提示菜单
select com in c1 c2 c3 all none
do
case $com in
 c1|c2|c3) echo "$com";;
 all) echo "c1 c2 c3";;
 none) break;;
 *) echo "erro ";;
esac
done


--awk
BEGIN:awk开始执行,运行一次
END:awk运行到最后执行

--关键字
FILENAME:文件名
NR:行数
NF:字段数
OFS:输出字段分隔符 默认空格
FS:输出 默认空格和制表符号
OFMT:数字输出格式
ORS:输出记录分隔符 默认新起一行
RS:输入记录分隔符  默认新起一行

$1 表字段1 类推
USER_INPUT_PRICE=$1
awk '
 BEGIN { FS=":"}
  ($2>price) && (1==1) { printf "%s %s %s\n", $1,",>",price; next}
  $2<=price { printf "%s %s %s\n", $1,",<=",price; }
' price="$USER_INPUT_PRICE" b.txt

--awk if
USER_INPUT_PRICE=$1
awk -FS=":" '{
  if(($2>price) && (1==1)) {
   printf "%s %s %s\n", $1,",>",price; next
  }else{
   printf "%s %s %s\n", $1,",<=",price;
  }
}' price="$USER_INPUT_PRICE" b.txt

--while 不推荐使用do while
while(x<NF){
 printf "%s\n",$x;
 x+=1;
}

--for
for(x=0;x<NF;x+=1){
 printf "%s\n",$x;
}

awk 的while if for 类c设计

--特殊参数
$0 命令名称
$n 参数 从1开始
$# 参数个数
$* 所有的参数被双重应用
$@ 独立的双重应用
$? 最后一个执行命令的推出状态
$$ 进程号
$!最后一个后台命令的进程号
$- 输出字符包含 i 表示交互式脚本

#获取命令输入的参数
# ./zyl.sh -f a -o b -v c
verbose=false
while getopts f:o:v OPTION ;
do
  case "$OPTION"  in
  f) echo "f=$OPTARG";;
  o) echo "0=$OPTARG";;
  v) echo "v=$OPTARG";;
  \?) echo "????";;
  esac
done


#别名
alias lsa="ls -a"
lsa

#取消别名
unalias lsa

 

--指定局部变量
typeset x=1


--输出唯一字符
uniq -c a.txt

--排序
sort -rk 1,2 b.txt
k:排序字段 1到2

-r:按逆序输出
-n:依照数值的大小排序。
-c:检查文件是否已经按照顺序排序。如果没有回提示。
-b:忽略每行前面开始出的空格字符。
--
   -d    排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
   -f    排序时,将小写字母视为大写字母。
   -i    排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
   -m    将几个排序好的文件进行合并。
   -M    将前面3个字母依照月份的缩写进行排序。
  
   -o<输出文件>    将排序后的结果存入指定的文件。
   -r    以相反的顺序来排序。
   -t<分隔字符>    指定排序时所用的栏位分隔字符。
   +<起始栏位>-<结束栏位>    以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
   --help    显示帮助。
   --version    显示版本信息。

 

--多个词的替换
sed '/zyl/ s/1/2/; /tomcat/ s/1/3/' b.txt

--d 表删除 sed '/tomcat/ d' a.txt
--q退出
top | sed '1,5 !d;5q'

 

--分隔 cut
cut -f1- -s --output-delimiter='|' -d,  b.txt
-[b,c,f] 分别是:byte,char,field
-d,:以分隔符号:逗号
-s:去除没有分隔符的数据
--output-delimiter 输出的分隔符


--join 联合
join -1 1 -2 2 -o 1.1 -a 1 -o1.2 -o 2.1 -t, a.txt b.txt
-1 1 -2 2:相当于a.txt文件中的第一个字段,和b.txt表中的第二个字段
-o 1.1 -o1.2 -o 2.1 表示显示a.txt 中的第一二个字段,b.txt表中的第一个字段
-t,表示以逗号分隔
-a 1 表示不匹配的
join -1 1 -2 2 -o 1.1 -a 1 -o1.2 -o 2.1 -t, a.txt b.txt


--单个字符的处理 查询替换
tr '源字符' '' < a.txt > b.txt
tr '\r' '\n' < a.txt
tr 'a-z' 'A-Z' < a.txt
tr -s 'e' 连续e,替换成单个e
echo "a b"| tr '[:blank:]' ','
[:blank:] 表转义字符有
alnum 字母或数字
alpha 字母
blank 空格
cntrl 控制符
digit 数字
graph 可印刷字符,不包括空格
lower 小写字符
print 可印刷字符,包括空格
punct 标点符号
space 空格
upper 大写字符
xdigit 十六进制


--eval
output="> b.txt"
eval echo hell "$output"

--信号
SIGHUP  1  控制终端发起被挂着或控制进程死亡
SIGINT  2  键盘中断
SIGQUIT 3  来自键盘的推出信号
SIGKILL 9  杀死进程的信号
SIGLRM  14 定时时钟中断
SIGTERM 15 终止信号


--语法检测
/bin/sh -nv ./zyl.sh


--init
0 :关机
1 :单用户模式
2 :多用户模式
3 :网络多用户模式
4 :未用
5 :图像多用户模式或停机
6 :重启

--uname
a  所有信息
m  硬件类型
n  系统的主机名
r  发布的级别
s  操作系统的名称

分享到:
评论

相关推荐

    Shell脚本学习笔记

    自己整理的Shell脚本学习笔记,脚本实例可直接运行:1. 变量和字符串;2. 传递参数;3. 基本运算符;4. echo&printf;&test;;5. 流程控制;6. 函数;7. 输入输出重定向&文件嵌入

    linuxshell脚本学习笔记.pdf

    Linux Shell 脚本学习笔记 Linux Shell 脚本是指使用 Linux 操作系统的 Shell 中执行的一系列命令的集合,用于自动化一些重复性的工作。下面是 Linux Shell 脚本学习笔记中的一些重要知识点: 命令提示符 命令提示...

    linux脚本shell学习笔记

    shell学习基本命令,可以帮助初学者快速掌握较全面的shell脚本知识

    总结搜集的shell脚本学习笔记(完结篇).pdf

    ### Shell脚本编程知识点概述 #### 一、预备知识与基本概念 在开始Shell脚本文档的学习之前,首先需要理解Shell...以上就是文档《总结搜集的shell脚本学习笔记(完结篇)》中所涵盖的主要知识点,希望对你有所帮助。

    Linux和shell脚本学习笔记

    总的来说,Linux和shell脚本的学习是理解和驾驭Linux系统的基础,掌握这些技能能够帮助用户更高效地进行系统管理、开发和调试。在嵌入式开发和服务器维护等领域,熟悉Linux操作和shell脚本编写更是必不可少的技能。...

    linuxshell脚本学习笔记文.pdf

    在本文中,我们将深入探讨Linux Shell脚本学习的一些关键知识点。 首先,命令提示符`[dyl@localhost ~]$`是用户在终端交互时看到的提示,它表明用户处于主目录(`~`),用户名是`dyl`,主机名为`localhost`。通过修改...

    shell脚本学习笔记–基础(1)

    shell脚本学习笔记–基础(1)简介脚本注释脚本解释器脚本执行脚本调试基本符号和命令含义 简介 学习Shell脚本之前,我们有必要先来认识认识什么叫Shell?谈到这个问题,我们首先来回忆一下计算机自底向上的体系,最...

    shell脚本编程学习笔记汇总

    shell脚本编程学习笔记汇总 本文档总结了 Linux shell 脚本编程的学习笔记,涵盖了 shell 脚本的定义、编写、权限、存放位置、函数、变量、IF 控制语句、命令退出状态等知识点。 一、shell脚本的定义 shell 脚本是...

    Linux教程+ shell学习笔记 + Shell脚本常用命令+shell脚本100例资源合集

    本文整理了一份Linux shell学习笔记及基本命令合集,包含了LINUX常用操作命令和命令行编辑快捷键、shell基本命令,Linux相关使用配置教程等,需要的朋友可下载试试! shell是一个用C语言编写的程序,它是用户使用...

    shell脚本汇总学习笔记

    shell脚本汇总学习笔记

    shell脚本学习课件笔记整理.rar

    shell从入门到应用,也包含AWK sed等操作,提供课件以及各种完整脚本以便学习。此课件视频来源于B站,链接为:https://www.bilibili.com/video/BV1st411N7WS?from=search&seid=5240570590491899209。

    linux学习笔记及其shell脚本学习教程

    三天掌握linux学习笔记及其shell脚本学习教程

    shell编程学习笔记

    shell脚本成分 开头和注释: shell脚本的开头,用来解释shell程序,包括:#!/bin/bash、#!/bin/csh、#!/bin/tcsh、#!/bin/pdksh,一般用#!/bin/bash。。 shell脚本中的注释,以#开头的...

    Shell脚本学习指南笔记.pdf

    Shell脚本是Linux/Unix操作系统中的一种解释型编程语言,常用于自动化系统管理任务和集成其他程序以执行特定任务。它的主要特点包括简单性、可移植性和开发便捷性。简单性意味着Shell脚本易于理解和编写,即使对于...

    自学习,Linux命令行与Shell脚本编程笔记!word版本

    这篇“自学习,Linux命令行与Shell脚本编程笔记”旨在帮助初学者掌握这两个核心技能。 首先,Linux命令行是操作系统与用户交互的主要方式之一,通过输入简单的指令,用户可以执行各种任务,如文件管理、系统监控、...

    linux运维学习笔记:Shell脚本书写规范.pdf

    Linux运维学习笔记:Shell脚本书写规范 Shell脚本是Linux系统中一种极为重要的工具,它能够帮助用户执行批量的命令操作,自动化日常运维任务。编写规范、易于理解的Shell脚本不仅有助于提高工作效率,而且方便日后...

Global site tag (gtag.js) - Google Analytics