shell基础练习


【shell脚本基础】
创建脚本
#vim  1.sh
*********************
#!/bin/bash
echo "hello world! "
*********************
#chmod  +x 1.sh
#sh 1.sh
hello world!

<弱引用 " ">:将字符串放置在双引号中,保留字符串中所有字符的文字值,$、`、\和!字符除外。换言之,变量
扩展和命令扩展在双引号内仍起作用。
#echo “can I have a $PATH”
can I have a /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin

#echo “The current time is $(date +%r).”
<强引用 ' '>:将字符串放置在单引号中,保留字符串中所有字符的文字值,同时禁用所有禁用所有扩展:
#echo 'ab$$$'
ab$$$
<转义 \ ,# ,``>:非引用的\是转义字符。它保留了下一个字符的文字值。(例如,\$PATH是确切的字符串$PATH,而不是PATH变量的内容。)
#echo  MAKE \$\$\$
MAKE  $$$
#echo MAKE  $$$
3006$
#echo #comment#

#echo `pwd`
/root/
Shell变量
shell变量用于为稍后在脚本中使用的名称指定值,并且仅限于shell命令行或从中声明变
量的脚本。
#cd /etc/skel  //此目录中保存了一些用户自定变量配置文件.bash_profile .bashrc
#env //列出系统域设的全部系统变量
HOSTNAME 、SHELL、HISTSIZE、MAIL、PATH、PWD、LANG、HOME、LOGNAME等一些环境变量
#set  //也可以输出环境变量,可以显示用户自定义的变量。

(1)允许系统内所有用户登录使用的改变量。具体操作方法是:在/etc/profile文件的最后添加一行 export  myname=CHENGCHENG 保存退出。#source /etc/profile
#echo $myname
CHENGCHENG
#su  student
#echo $myname
CHENGCHENG
:ok说明配置成功。
(2)仅允许当前用户使用改变量。具体操作方法:在当前用户的主目录下的 .bashrc文件的最后一行加入 export mywork=LINUX ,然后#source .bashrc 就生效了
(3)更改umask值需要更改两个文件里的内容 /etc/profile,/etc/bashrc

命令的替换(变量赋值)
#echo $(ls -l)==`ls -l`
@@@练习题,把/etc目录中的以.conf结尾的文件copy并命名为文件名.时间
#find /etc/ -type f -name '*.conf'  -exec cp {} /mnt \;
#ls |xargs -n1 -i{}  mv  {}  /mnt/{}.$(date +%T)
利用脚本如下:
#!/bin/bash
for name in `find /etc/ -name "*.conf"`
do
    cp -r $name  /mnt/`basename $name`.`data +%T`
done

【算术运算符】
++,--,+,-,/,%,*,**,+=,-=
用shell计算1到100之和:
#seq 1 100 |xargs |sed 's/ /+/g' |bc
5050
#!/bin/bash
j=0
for i in `seq 1 100` // `seq 1 100` == $(seq 1 100) == {1..100}
do
    j=$[ $j+$i ] == ((j+=i))
done
    echo $j
**********************************
#!/bin/bash
for ((i=1;i<=100;i++))
do
    ((j+=i))==j=`axpr $i+$j`==j=$[j+=i]
done
    echo $j

#let a=2+9
#echo $a
11
#echo `axpr 3+4`
7
循环for

 for((i=0; i<=100; i++));do j=`expr $j + $i` ;done;echo $j

【数据库的备份】mysql现在被甲骨文收购为了推出他的ORACLE,现在好多公司都在使用mysql因为是开源免费的节省成本,而像银行政企使用的是ORACLE,而红帽公司利用开源mysql的源代码开发了和mysql兼容的mariadb数据库。
数据库的安装
#yum install -y  mariadb mariadb-server
#mysql -e "show databases;" -E -N |grep -v '^*' |grep -v 'schema$'
#mysqldump -uroot -p  db > db.sql
#mysql -uroot -p db < db.sql
只备份一个表 #mysqldump -uroot -p db table > dbtable.sql
备份时指定字符集#mysqldump -uroot -p --default-character-set=utf8 db> 1.sql
#mysql -uroot -p --default-character-set=utf8 db< 1.sql
【脚本自动备份数据库】
#!/bin/bash
for DB in $(mysql -e "show databases;" -E -N | grep -v '^*' | grep -v 'schema$')
do
echo "Backing up $DB"
mysqldump $DB > /dbbackup/$DB.dump
done
echo ""
for DBDUMP in /dbbackup/*
do
SIZE=$(stat --printf "%s\n" $DBDUMP)
echo "$DBDUMP
$SIZE"
done
【交互式条件判断】
脚本1
#!/bin/bash
read -p "please input your username:" username
useradd $username
read -p "please input your password:" password
echo "$password" | passwd --stdin  $username > /dev/null
echo OK


脚本2:执行脚本时参数为apple时输出banana,参数为banana时输出apple
#!/bin/bash
        if [ "$*" = "apple" ];then
                echo "banana"
        elif [ "$*" = "banana" ];then
                echo "apple"
        else
                echo " sorry please input with apple | banana"
        fi
#!/bin/bash
case $1 in
    apple)
        echo "banana"
        ;;
    banana)
        echo "apple"
        ;;
    *)
        ;;
esac

脚本3,ping 10个ip
#!/bin/bash
        for ip in `seq 1 10`
do
        ping -w1 -c1  172.25.254.$ip &>/dev/null

        if [ "$?" -eq "0" ] ;then
                echo "ping 172.25.254.$ip is up"
        else
                echo "ping 172.25.254.$ip is down"
        fi
done

数字比较运算符:-eq、-ne、-lt、-le、-gt、-ge
字符串比较运算符:=、!=
#[ abc = ABC ];echo $?
1
#[ abc = abc ];echo $?
0

【expect脚本】
test条件判断
test命令可用于评估bash脚本中的表达式。它评估其参数所指定的表达式,如果表达式
为true,返回零退出状态,如果表达式为false,则返回非零退出状态。test具有替代语
法,使用方括号"[]"将表达式括起来,这样更易于阅读。

1)判断表达式
if test  (表达式为真)
if test !表达式为假
test 表达式1 �Ca 表达式2                  两个表达式都为真
test 表达式1 �Co 表达式2                 两个表达式有一个为真
test 表达式1 !  表达式2                    条件求反

2)判断字符串
test �Cn 字符串                                   字符串的长度非零
test �Cz 字符串                                    字符串的长度是否为零
test 字符串1=字符串2                    字符串是否相等,若相等返回true
test 字符串1!=字符串2               字符串是否不等 ,若不等反悔false

3)判断整数
test 整数1 �Ceq 整数2                        整数相等
test 整数1 �Cge 整数2                        整数1大于等于整数2
test 整数1 �Cgt 整数2                         整数1大于整数2
test 整数1 �Cle 整数2                         整数1小于等于整数2
test 整数1 �Clt 整数2                          整数1小于整数2
test 整数1 �Cne 整数2                        整数1不等于整数2

4)判断文件
test  File1 �Cef  File2                           两个文件是否为同一个文件,可用于硬连接。主要判断两个文件是否指向同一个inode。
test  File1 �Cnt  File2                          判断 文件1是否比文件2 新
test  File1 �Cot  File2                            判断文件1比是否文件2 旧
test �Cb File                                           文件是否块设备文件
test �Cc File                                           文件并且是字符设备文件
test �Cd File                                           文件并且是目录
test �Ce File                                           文件是否存在 (常用)
test �Cf File                                            文件是否为正规文件 (常用)
test �Cg File                                           文件是否是设置了组ID
test �CG File                                           文件属于的有效组ID
test �Ch File                                           文件是否是一个符号链接(同-L)
test �Ck File                                           文件是否设置了Sticky bit位
test �Cb File                                           文件存在并且是块设备文件
test �CL File                                           文件是否是一个符号链接(同-h)
test �Co File                                           文件的属于有效用户ID
test �Cp File                                           文件是一个命名管道
test �Cr File                                            文件是否可读
test �Cs File                                           文件是否是非空白文件
test �Ct FD                                             文件描述符是在一个终端打开的
test �Cu File                                           文件存在并且设置了它的set-user-id位
test �Cw File                                          文件是否存在并可写
test �Cx File                                           文件属否存在并可执行

alias别名命令
#alias hah="ls"
#unalias hah
使用函数

你可能感兴趣的:(字符串,current,单引号,kiosk)