LINUX
BASH
hello="A B C D"
echo "$hello" # A B C D
echo '$hello' # $hello
单引用作用将会导致"$"被解释为单独的字符,而不是变量前缀.
c=`ls -l` # 把'ls -l'的结果赋值给'a'
1. echo $c #然而, 如果没有引号的话将会删除ls结果中多余的tab和换行符.
2. echo "$c" #如果加上引号的话, 那么就会保留ls结果中的空白符.
1. #!/bin/bash
2. for i in 7 9 2 4 5 12
3. do
4. echo $i
5. done | sort -n
6. exit 0
1. #!/bin/bash
2. # 从/etc/fstab中读行.
3. File=/etc/fstab
4. {
5. read line1
6. read line2
7. } < $File
8. echo "First line in $File is:"
9. echo "$line1"
10. echo "Second line in $File is:"
11. echo "$line2"
1. # 从/etc/fstab中读行.
2. File=/etc/fstab
3. {
4. read line1
5. read line2
6. } < $File
例2-8: 将所有查找到的文件(在工作目录下过去24小时内修改过的文件)打一个包
1. #!/bin/bash
2. tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
将一个文件描述符输出到另一个文件描述符
1. #!/bin/bash
2. exec 4>out.txt
3. exec 5>&4
4. date 1>&5
* 设置只读变量 $ var=value
$ readonly var #此时var只可进行读操作,不可修改
$ readonly #直接输入readonly,显示所有只读变量
[root@redflag ~]# read [-pt] variable
-p:后面接提示字符
-t: 后面可以接等待的秒数。
例如:
[root@redflag ~]# read -p "Please keyin your name: " -t 30 named
1) ${var:-value}:如果变量var未定义,返回一个默认值。
如果var存在且非空,则表达式${var:-value}的值为$var;如果var未定义,则表达式值${var:-value}为value
变量设置方式 | str没有值 | str为空字符串 | Str已设置为非空字符串 | |
var=${str-expr} | var=expr | var= | var=$str | |
var=${str:-expr} | var=expr | var=expr | var=$str | |
var=${str+expr} | var= | var=expr | var=expr | |
var=${str:+expr} | var= | var= | var=expr | |
var=${str=expr} | str=expr var=expr | str 不变 var= | str 不变 var=$str | |
var=${str:=expr} | str=expr var=expr | str=expr var=expr | str 不变 var=$str | |
var=${str?expr} | expr输出至stderr | var= | var=$str | |
var=${str:?expr} | expr输出至stderr | expr输出至stderr | var=$str | |
|
|
|
| |
量的设置方式 | 说明 | |||
${变量名#关键字} | 若变量从头开始符合关键字,则将符合的最短内容删除 | |||
${变量名##关键字} | 若变量内容从头开始符合关键字,则将符合的最长内容删除 | |||
${变量名%关键字} | 若变量从尾向前的内容开始符合关键字,则将符合的最短内容删除 | |||
${变量名%%关键字} | 若变量从尾向前的内容开始符合关键字,则将符合的最长内容删除 | |||
${变量名/old/new} | 若变量内容符合old字符串,则第一个旧字符串被新字符串取代 | |||
${变量名/old/new} | 若变量内容符合old字符串,则所有旧字符串被新字符串取代 | |||
#!/bin/bash
echo "$0 $1 and $2"
echo "The number of para is $#"
set Jake Nicky Scott
echo "Para number is :$#All the para is :$*"
$$: shell进程的PID号
$!: 后台运行的进程的PID号
$?: 退出状态
1. while getopts xy options 2>/dev/null //只截取x和y,其他的都是/?
2. do
3. case $options in
4. x) echo "you entered x ";;
5. y) echo "you entered y" ;;
6. /?) echo "only -x and -y are valid options " 1>&2 ;;
7. esac
8. done
9. exit 0
局部变量
1. pearFunc () {
2. typeset pear=2 # local pear=2
3. echo "In pearFunc():pear is $pear"
4. }
Bash Shell 调试
bash -n 脚本名 |
最有用的命令
#tail -f /var/log/httpd/access_log #监视Apache的访问日志
basename ls –ltr ⇒結果:ls
last
例如,我们想在/etc目录中查找大于500000字节,并且在24小时内修改的某个文件,则可以使用-and (与)把两个查找参数链接起来组合成一个混合的查找方式。
find /etc -size +500000c -and -mtime +1
network
1. 配置一台主机的网络实例,其内容包括:网关,DNS服务器,IP地址,子网掩码
实现方式有两种:
一,直接修改/etc/sysconfig/network-scripts/ifcfg-eth0文件
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.100.3
GATEWAY=255.255.255.0
BROADCAST=192.168.100.254
ONBOOT=yes
添加DNS
修改:/etc/resolv.conf
nameserver 192.168.100.1
修改主机名/etc/sysconfig/network
HOSTNAME=myhost
为了解析本机的NetBISO名,可将/etc/hosts文件修改为如下内容:
192.168.100.3 myhost
#!/bin/bash
2. # findstring.sh:
3. # 在一个指定目录的所有文件中查找一个特定的字符串.
4.
5. directory=/usr/bin/
6. fstring="Free Software Foundation" # 查看哪个文件中包含FSF.
7.
8. for file in $( find $directory -type f -name '*' | sort )
9. do
10. strings -f $file | grep "$fstring" | sed -e "s%$directory%%"
11. # 在"sed"表达式中, 我们必须替换掉正常的替换分隔符"/", 因为"/"碰巧是我们需要过滤的字符串之一.
12. # 如果不用"%"代替"/"作为分隔符,那么这个操作将失败,并给出一个错误消息.(试一试).
13. done
14. exit 0
为了使用服务生效,执行脚本:/etc/init.d/network restart即可.
VIM
在某个用户下,现在LINUX上运行vncserver
Vnc密码:123456
重定向
cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;
cmd 2> file 把 stderr 重定向到 file 文件中;
cmd 2>> file 把 stderr 重定向到 file 文件中(追加);
cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加);
gdb
set args
show args
bt (查看堆栈)
p (变量名) – 编译时要加-g
r
n
c
q
route add -net 192.168.2.0/24 eth0
oracle listen start だめ。/etc/hostsに必ず以下のものを存在すべき。
Localhost localhost.domain
CentOS 5.3でShift_JISを使いたい
まず、ロケ―ルデータがあるかチェック
1 | # ls -l /usr/lib/locale/ja_JP.SJIS |
ディレクトリが存在しない場合は、
1 | # localedef -f SHIFT_JIS -i ja_JP /usr/lib/locale/ja_JP.SJIS |
その後、
1 | # vi /etc/sysconfig/i18n | |
2 | LANG="ja_JP.SJIS" |
3 | SUPPORTED="ja_JP.SJIS:ja_JP:ja" | |
4 | SYSFONT="latarcyrheb-sun16" |
で、再ログインするとShift_JISがデフォルトの文字コードになっている。
# nslookup google.com
下記の返答がかえってきたら、ミラーを引きにいけてないので、ネットワークの設定を疑う
;; connection timed out; no servers could be reached
IPアドレスを確認
# ifconfig
eth0 Link encap:Ethernet HWaddr **:**:**:**:**:**
inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:44 errors:0 dropped:0 overruns:0 frame:1
TX packets:81 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4045 (3.9 KiB) TX bytes:14779 (14.4 KiB)
Interrupt:177
赤文字のaddrのIPを確認K
デフォルトゲートウェイを確認
#vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
GETWAT=172.28.139.1
ちゃんとむき先はあっているのか確認
名前解決の設定確認
# vi /etc/resolv.conf
nameserver 172.28.138.11
使用ISO文件建立本地yum仓库
2009-08-26 13:51
Yum 仓库 为了避免从网络下载软件包可能发生的软件包不完整、下载速度慢、网络故障等问题,我们强烈建议您使用本地的 DVD/CD iso 来创建 yum 仓库,这样在安装的时候速度快,而且可以保证所有软件包都能顺利安装。 下面的操作都是在您安装好 RHEL/CentOS 系统后进行的。 先从光盘安装createrepo工具,以及网络下载工具 wget: # rpm -ivh rpm -ivh createrepo-0.4.11-3.el5.noarch.rpm createrepo命令用于生成 yum仓库所必须的一些信息,这些信息都存放在 repodata/ 目录底下,您打开看看就会明白它做了些什么事情。 如果您使用的是官方的 DVD ISO,则需要将它复制到系统上,挂载后制作 yum 仓库: # mkdir /mnt/cdrom/ 如果您使用的是多个 CD iso 文件,需要先复制到系统上,挂载后制作 yum 仓库。 有几个 ISO 就创建几个目录,并将对应的 ISO 挂载上去: # mkdir -p /mnt/{1,2,3,4,5,6} 建 yum 仓库: # cd /mnt/ 清空并重新定义 yum仓库: 将/etc/yum.repos.d/下面的文件全部删除: # rm -f /etc/yum.repos.d/* 创建新的yum仓库的定义文件:/etc/yum.repos.d/dvdiso.repo,然后加入以下内容: [DVDISO] 执行 'yum clean all' 命令,将所有 yum metadata 等信息清空,再重新获取最新的仓库信息: # yum clean all 如果在 'yum list' 命令的输出中能够看到刚才制作的仓库里的软件包的名字,那就是 OK 了。再试着安装一个软件包看是否成功: # yum install mysql-server |